home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / gpp-1_42.lha / g++-1.42.0 / ChangeLog89 < prev    next >
Text File  |  1991-10-19  |  143KB  |  3,582 lines

  1. Sun Dec 31 10:47:51 1989    (tiemann at calvin)
  2.  
  3.     * cplus-cvt.c (build_up_reference): Take multiple inheritance into
  4.     account in all (instead of just some) cases.  Take virtual
  5.     baseclasses into account in all (instead of no) cases.
  6.  
  7.     * cplus-init.c (build_vbase_delete): Convert ADDR before calling
  8.     destructr.  Otherwise privately derived baseclasses will give
  9.     problems.
  10.  
  11.     * cplus-init.c (expand_aggr_init_1): Distinguish case where
  12.     initializer list fails because virtual baseclass lacks default
  13.     initializer and other bad argument lists.
  14.  
  15. Sat Dec 30 13:09:43 1989    (tiemann at calvin)
  16.  
  17.     * cplus-tree.h (lang_type): Added bit for MARKED6.  Used to use
  18.     MARKED3 to mean `base class initialized', but that conflicts with
  19.     use meaning `virtual baseclass processed' in cplus-search.c.
  20.     * cplus-init.c (finish_base_init): Use _MARKED6 instead of
  21.     _MARKED3 to indicate a baseclass has been initialized.
  22.  
  23.     * cplus-init.c (expand_aggr_init_1): If TYPE_HAS_CONSTRUCTOR(TYPE)
  24.     but no constructor takes the initializer, and there is no X(X&)
  25.     constructor, generate code for X(X&) constructor by hand.
  26.  
  27.     * cplus-typeck.c (build_modify_expr_1): Substantially simplified
  28.     using assumption that LHS and RHS are type-compatible as a
  29.     consequence of being elements of isomorphic structures.
  30.  
  31.     * cplus-init.c (expand_aggr_init): If EXP is initialized from
  32.     an object of its same type, and EXP does not have an X(X&)
  33.     constructor, have build_modify_expr do the work.
  34.  
  35. Fri Dec 29 00:29:45 1989    (tiemann at calvin)
  36.  
  37.     * cplus-class.c (finish_struct): Don't build default functions by
  38.     default.  Instead, rely on compiler doing the Right Thing when
  39.     handling INIT_EXPR and MODIFY_EXPR.
  40.  
  41.     * cplus-typeck.c (build_modify_expr): Don't copy virtual function
  42.     table fields or virtual baseclass fields when performing
  43.     memberwise copying.
  44.     Instead, split `build_modify_expr' into two functions, a recursive
  45.     form `build_modify_expr_1' which doesn't do any copying for
  46.     virtual baseclasses, and a non-recursive form `build_modify_expr',
  47.     which does handle these at top level.
  48.  
  49. Thu Dec 28 12:37:37 1989    (tiemann at calvin)
  50.  
  51.     * cplus-decl.c (build_default_constructor): Typo--used
  52.     DECL_VIRTUAL_P (...) when VFIELD_NAME_P (DECL_NAME (...)) was
  53.     meant.  Also, take into account fact that second arg might be "in
  54.     charge" arg.
  55.  
  56.     * cplus-class.c (finish_base_struct): Move setting of
  57.     TYPE_USES_VIRTUAL_BASECLASSES from here...
  58.     * cplus-decl.c (xref_tag): ...to here.  Needed because
  59.     constructors for virtual baseclasses now need new type signatures.
  60.  
  61.     * cplus-decl2.c (grokclassfn): Rewrote code that inserts
  62.     parameters so that SOS will work with virtual baseclasses.
  63.     @@ But rest of SOS code must be changed to deal with this.
  64.  
  65.     * cplus-init.c (expand_aggr_vbase_init): Changed interface.  Last
  66.     arg is no longer FUNCTION_DECL, rather, it is the list of
  67.     initializations that the constructor must perform (if in charge).
  68.     All virtual baseclasses, whether they need constructors or not,
  69.     will be initialized one way or another.
  70.  
  71.     * cplus-decl.c (finish_function): Don't do special things for
  72.     constructors with virtual baseclasses.  Leave that up to
  73.     `finish_base_init'.
  74.     * cplus-init.c (finish_stmt): Same change.
  75.  
  76.     * cplus-init.c (finish_base_init): Test "in charge" variable and
  77.     conditionally do all virtual baseclass initialization.
  78.  
  79.     * cplus-class.c (build_method_call): New flag LOOKUP_HAS_IN_CHARGE
  80.     which means that parameter list comes with the "in charge"
  81.     parameter already set up.  If the call is to a constructor, and
  82.     this flag is not set, then say we are "in charge" iff constructor
  83.     called is for new object.
  84.     * cplus-init.c (expand_aggr_init_1): Add "in charge" parameter
  85.     when appropriate, and set FLAGS in those cases.
  86.  
  87.     * cplus-method.c (fndecl_as_string): Don't print "in charge"
  88.     variable when formatting constructors for objects with virtual
  89.     baseclasses.
  90.  
  91.     * cplus-tree.h (lang_decl): Add bit for constructors which build
  92.     objects with virtual baseclasses.  These constructors take a new
  93.     extra argument after the `this' pointer that says whether they are
  94.     "in charge" of initializing virtual baseclass things or not.
  95.     * cplus-decl2.c (grokclassfn): Set DECL_CONSTRUCTOR_WITH_VBASE_P
  96.     bit when appropriate.  Also, add extra parameter in that case.
  97.     * All GNU C++ files: Change name of AUTO_DELETE_IDENTIFIER to
  98.     IN_CHARGE_IDENTIFIER, since that is the correct generalization of
  99.     its function, and thus allows the same identifier to be used in
  100.     constructors and destructors.
  101.  
  102. Thu Dec 21 12:58:05 1989  Michael Tiemann  (tiemann at hudson)
  103.  
  104.     * cplus-init.c (expand_aggr_init): If initializing from a GNU C
  105.     CONSTRUCTOR, consider the elts in the constructor as parameters to
  106.     an implicit GNU C++ constructor.
  107.  
  108. Wed Dec 20 10:45:46 1989  Michael Tiemann  (tiemann at hudson)
  109.  
  110.     * cplus-decl.c (duplicate_decls): Don't know why I turned off
  111.     propagation of DECL_IN_AGGR_P bit, but it needs to be
  112.     on--otherwise we cannot catch duplicate method declarations in
  113.     class scope.  Was it turned off (erroneously) for efficiency
  114.     reasons?
  115.  
  116.     * cplus-class.c (convert_harshness): Don't see two functions
  117.     needing user-defined type conversions as ambiguous is one comes
  118.     from immediate class, when the other comes from a base class.
  119.  
  120.     * cplus-decl.c (grokdeclarator): Don't permit storage class
  121.     specifiers in parameter declarations.
  122.  
  123.     * cplus-typeck.c (mark_addressable): Say we're sorry if named
  124.     return value much change from register to memory.  Also, since
  125.     TREE_ADDRESSABLE is checked at top, no need to recheck in various
  126.     other parts.
  127.     * cplus-cvt.c (build_up_reference): Same change.
  128.  
  129.     * stmt.c (expand_function_start): If function value is in a
  130.     register, set TREE_REGDECL of the DECL_RESULT.
  131.  
  132.     * cplus-class.c (convert_harshness): Conversion of enum to int
  133.     costs an extra penalty.  Also, don't permit one kind of enum to
  134.     convert to another.
  135.  
  136.     * cplus-search.c (dfs_pushdecls): Only set TREE_USED to zero for
  137.     FIELD_DECLS.  If we zero it out for e.g. VAR_DECLs, they won't get
  138.     written out at end of file.
  139.  
  140. Tue Dec 19 17:19:31 1989  Michael Tiemann  (tiemann at hudson)
  141.  
  142.     * cplus-decl.c (finish_decl): If we are at top level and
  143.     allocation is temporary, switch to permanent allocation before
  144.     calling `grok_reference_init'.  Also, initialization of references
  145.     was losing when initializer was a constructor.
  146.     @@ Problem that must be better solved: The compiler was confused
  147.     about what NEW_EXPR meant--when it when looking for temp space for
  148.     the reference, it was grabbing space from the file-level
  149.     initialization function, not from static space.  What's needed is
  150.     objects which really know how to get the kind of space they are
  151.     looking for when they are really expanded.
  152.  
  153.     * cplus-type2.c (build_functional_cast): Check that type is
  154.     defined before testing various constructor bits.
  155.  
  156. Thu Dec 14 15:14:12 1989  Michael Tiemann  (tiemann at arkesden)
  157.  
  158.     * cplus-tree.c (make_deep_copy,copy_to_permanent): New functions.
  159.     * cplus-init.c (build_new): Dec 12 change was wrong.  Instead,
  160.     call copy_to_permanent if we need to stash away the initializer.
  161.  
  162. Tue Dec 12 01:16:31 1989  Michael Tiemann  (tiemann at arkesden)
  163.  
  164.     * cplus-init.c (build_new): Check that INIT is not NULL_TREE
  165.     before checking its permanence.
  166.  
  167.     * cplus-decl.c (decls_match): If TREE_TYPE (NEWDECL) is
  168.     ERROR_MARK_NODE, don't call comptypes.
  169.  
  170.     * cplus-decl2.c (grokclassfn): Parameters for constructors with
  171.     virtual baseclasses must be build on permanent_obstack.
  172.  
  173.     * cplus-parse.y (member_init): If using old-style member
  174.     initialization for base class, remember to move allocation to the
  175.     permaent_obstack before reading the initializer.
  176.  
  177.     * cplus-class.c (build_method_call): If global member function is
  178.     good, record that fact in BEST.  That way our early-out for member
  179.     functions won't accidently call an inferior member function.
  180.  
  181.     * cplus-decl.c (grokdeclarator): If TREE_CODE (decl) ==
  182.     ERROR_MARK, then silently continue processing, rather than
  183.     aborting compilation.
  184.  
  185.     * cplus-parse.y (except_stmts): Call `expand_start_catch' and
  186.     `expand_end_catch' instead of `expand_exit_except' when expanding
  187.     default catch clause.  Otherwise, we scream out to the next
  188.     handler, not to the point after the handler.
  189.  
  190.     * cplus-class.c (build_overload_call): continue statement missing
  191.     in TYPE_DECL case.
  192.  
  193. Sat Dec  9 23:27:56 1989  Michael Tiemann  (tiemann at arkesden)
  194.  
  195.     * cplus-decl.c (xref_tag): Mark REF in addition to all its
  196.     basetypes so we can protect against the user declaring recursive
  197.     types by accident.  Also fixed Braino in testing value of I after
  198.     the BINFO loop.
  199.  
  200. Thu Dec  7 16:37:28 1989  Michael Tiemann  (tiemann at arkesden)
  201.  
  202.     * cplus-search.c (dfs_record_inheritance): Check that MI_SIZE is
  203.     nonzero before entering loop which uses it as stride.
  204.  
  205.     * cplus-typeck.c (build_component_ref_2): Make subroutine of code
  206.     which builds the final COMPONENT_REF structure because it must be
  207.     recursive in the case we have a field from a base class of a
  208.     virtual base class.
  209.  
  210. Wed Dec  6 08:05:59 1989  Michael Tiemann  (tiemann at arkesden)
  211.  
  212.     * cplus-class.c (build_scoped_method_call): Dec 2 introduced a bug
  213.     by attempting to optimize tree node allocation.  Fixed by always
  214.     converting EXP.
  215.  
  216.     * cplus-decl.c (grokdeclarator): If TYPE becomes ERROR_MARK_NODE,
  217.     and we are chasing down the declarator, must chase to TREE_OPERAND
  218.     (DECLARATOR, 1) if TREE_CODE (DECLARATOR) is SCOPE_REF.
  219.  
  220.     * cplus-class.c (finish_struct): Change criterion for building
  221.     init list from != CONST_DECL to == FIELD_DECL.  Also, don't count
  222.     a class as needing constructing or needing constructor based on
  223.     static members.
  224.  
  225.     * cplus-init.c (expand_vec_init): Call itself recursively with
  226.     FROM_ARRAY nonzero if TREE_TYPE (init) is same as TREE_TYPE (exp).
  227.     Also, if coming FROM_ARRAY, only call `expand_aggr_init' if there
  228.     is a constructor to call.  Otherwise, call `expand_assignment'.
  229.  
  230.     * cplus-class.c (finish_struct): Can't have a default constructor
  231.     if the class has reference types without default initial values.
  232.  
  233.     * cplus-tree.h (TYPE_RAISES_EXCEPTIONS): Use TYPE_NAME instead of
  234.     (tree) TYPE_LANG_SPECIFIC.
  235.     * cplus-decl.c (duplicate_decls): Now TYPE_LANG_SPECIFIC implies
  236.     IS_AGGR_TYPE always.
  237.  
  238.     * cplus-init.c (build_default_constructor): Don't build
  239.     initializer for default members.
  240.  
  241.     * cplus-class.c (finish_struct): If FUNCTION_DECL has
  242.     IDENTIFIER_ERROR_LOCUS set, then don't keep the function in the
  243.     class.  It is evil.
  244.  
  245.     * cplus-init.c (expand_member_init): Don't permit initialization
  246.     of member from base class--unless baseclass is virtual and has no
  247.     constructor.
  248.     * cplus-init.c (member_init_ok_or_else): New function
  249.     encapsulating this and other checks for validity of member
  250.     initialization.
  251.  
  252.     * cplus-type2.c (build_functional_cast): Try going through type
  253.     conversion function if no constructors apply.
  254.  
  255.     * cplus-typeck.c (c_expand_return): When returning a named return
  256.     value, call `use_variable' on the result, in case it is in a
  257.     register.
  258.  
  259.     * cplus-class.c (compute_conversion_costs): Don't warn about
  260.     contravariance violations (or other problems) as a result of
  261.     calling `comp_target_types' (via call to `instantiate_type').
  262.  
  263.     * cplus-init.c (expand_aggr_init): Check that INIT is nonzero
  264.     before accessing its TREE_TYPE.
  265.  
  266. Tue Dec  5 00:13:33 1989  Michael Tiemann  (tiemann at arkesden)
  267.  
  268.     * integrate.c (copy_rtx_and_substitute): If we folded something
  269.     completely into a constant, don't try to make it a legitimate
  270.     memory reference out of it.
  271.  
  272.     * cplus-class.c (propagate_basetype_offsets): Forgot to set
  273.     ASSOC_TYPE (ASSSOC) when building the new basetype.
  274.  
  275.     * cplus-init.c (expand_aggr_init): When initializing const array,
  276.     turn off const bits during initialization.  Otherwise constructor
  277.     can't be called (since it is calling from const object to
  278.     non-const member function).
  279.  
  280.     * cplus-method.c (build_overload_name): Set PARMTYPE to
  281.     TYPE_MAIN_VARIANT (PARMTYPE) after extracting interesting bits.
  282.  
  283. Mon Dec  4 04:56:08 1989  Michael Tiemann  (tiemann at arkesden)
  284.  
  285.     * cplus-decl.c (finish_decl): wrt Nov 14 change, only change
  286.     DECL_NAME of TTYPE if DECL is not a FUNCTION_DECL.  It screws up
  287.     consing up of default functions.
  288.     * cplus-decl.c (grokdeclarator): When replacing anonymous aggr
  289.     names with reasonable aggr names, change the names of any default
  290.     constructors and/or destructors.
  291.  
  292.     * cplus-tree.h (type_flags): Added bits for
  293.     TREE_GETS_CONST_{ASSIGN,INIT}_REF.
  294.     * cplus-decl.c (grok_{ctor,op}_properties): Set bits here.
  295.     * cplus-class.c (finish_base_struct): Read bits here.
  296.     * cplus-class.c (finish_struct): If 
  297.  
  298.     * cplus-init.c (expand_vec_init): Implement copy initialization
  299.     from one vector to another (to make X(X&) work if members
  300.     are vectors of X).  Added parameter FROM_ARRAY to signify this
  301.     fact.
  302.     * All callers changed.    
  303.  
  304.     * cplus-decl.c (grokdeclarator): Test for validity of destructor
  305.     declaration was too harsh.  It was not allowing one to declare
  306.     that a destructor from a base class had public visibility in the
  307.     current class.    
  308.  
  309.     * cplus-method.c (hack_identifier): Vestigial double TREE_VALUE.
  310.     Now that we use baselinks, everything is one level of list.
  311.  
  312.     * expr.c (expand_builtin): Fixed for BUILTIN_SAVEREGS case, again.
  313.     This time, loop was failing because there was only one insn being
  314.     protected.  Now, emit a note, so that loop terminates properly.
  315.  
  316.     * cplus-decl.c (build_default_constructor): Handle initialization
  317.     of anonymous unions by bitwise copy.
  318.     * cplus-init.c (finish_base_init): Handle wholesale initialization
  319.     of anonymous unions, i.e., the whole union, rather than just any
  320.     one member.
  321.  
  322. Sun Dec  3 13:32:29 1989  Michael Tiemann  (tiemann at arkesden)
  323.  
  324.     * cplus-decl.c (grok_ctor_properties): Add argument CTYPE to say
  325.     what class type we are grokking for.
  326.  
  327.     * All GNU C++ files: Changed tests against IS_AGGR_TYPE when test
  328.     against TYPE_LANG_SPECIFIC tests the property in which we are
  329.     interested.
  330.  
  331.     * cplus-decl.c (grok_ctor_properties): Notice whether constructor
  332.     can be used as default constructor, i.e., X ().
  333.     * cplus-class.c (base_info): Add new fields `needs_default_ctor'
  334.     and `cant_have_default_ctor'.  Set the former if any of the
  335.     basetypes define a default constructor.  Set the latter if and of
  336.     the basetypes define constructors, but not the default
  337.     constructor.
  338.     * cplus-class.c (finish_struct): If NEEDS_DEFAULT_CTOR and not
  339.     CANT_HAVE_DEFAULT_CTOR, then cons up a default constructor for T.
  340.     * cplus-lex.c (cons_up_default_function): Handle this new kind of
  341.     default constructor.
  342.     * cplus-decl.c (finish_function): Ditto.
  343.  
  344.     * cplus-typeck.c (build_modify_expr): Change assignment to this
  345.     from error to warning if FLAG_THIS_IS_VARIABLE.
  346.  
  347.     * cplus-class.c (finish_struct): Build default X(X&) constructor
  348.     if there are *any* constructors, not just if there are inherited
  349.     X(X&) constructors.
  350.  
  351.     * integrate.c (function_cannot_inline_p): Raise threshold from 3
  352.     to 4, since we copy more NOTEs now.
  353.  
  354.     * cplus-decl.c (finish_function): If DECL_CONSTRUCTOR_P (FNDECL)
  355.     and DECL_COMPILER_GENERATED_P (FNDECL), do the default thing for
  356.     this constructor (memberwise initialization).  Done by calling
  357.     `build_default_constructor'.
  358.     * cplus-decl.c (build_default_constructor): New function.
  359.  
  360.     * cplus-lex.c (cons_up_dtor_for_type): Change name to
  361.     `cons_up_default_function'.  Takes new argument KIND saying what
  362.     kind of default function to build.  Cons up destructor or X(X&)
  363.     constructor depending on KIND.
  364.     * cplus-init.c (expand_aggr_init_1): Test TYPE_HAS_INIT_REF, not
  365.     TYPE_GETS_INIT_REF.
  366.     * cplus-typeck.c (convert_for_initialization): Ditto.  If !HAS,
  367.     but GETS, then abort for now.
  368.  
  369.     * cplus-class.c (finish_base_struct): Propagate
  370.     TYPE_GETS_ASSIGN_REF.
  371.     * cplus-class.c (finish_struct): If TYPE_GETS_ASSIGN_REF (T)
  372.     but not TYPE_HAS_ASSIGN_REF (T), then default.
  373.     * cplus-decl.c (grok_ctor_properties): Set TYPE_HAS_INIT_REF along
  374.     with TYPE_GETS_INIT_REF.
  375.  
  376.     * cplus-init.c (build_delete): Don't check PROTECT when converting
  377.     the object to be destroyed from derived type to base type.
  378.     Leave it up to whether the destructor is visible or not
  379.     to make that decision.
  380.  
  381.     * cplus-typeck.c (actualparameterlist): New parameter FLAGS.
  382.     * cplus-typeck.c (convert_for_initialization): Ditto.
  383.     * cplus-cvt.c (convert_to_reference): Change PROTECT to FLAGS.
  384.     * cplus-cvt.c (build_up_reference): Ditto.
  385.     * All callers changed.
  386.  
  387.     * cplus-init.c (build_delete): When deleting members, use PROTECT
  388.     rather than 1 as value for calling `build_delete' recursively.
  389.  
  390.     * cplus-decl2.c (grokfield): If the initializer winds up being
  391.     `error_mark_node', wrap it in a NOP so `decl_constant_value' will
  392.     do the right thing.
  393.  
  394.     * cplus-decl.c (grokparms): If default parameter needs
  395.     type instantiation, do it.
  396.  
  397.     * cplus-typeck.c (build_modify_expr): Cast first expression in a
  398.     COMPOUND_EXPR to VOID_TYPE_NODE to suppress warning from
  399.     warn_if_unused_value.
  400.  
  401. Sat Dec  2 16:57:52 1989  Michael Tiemann  (tiemann at arkesden)
  402.  
  403.     * cplus-class.c (build_scoped_method_call): Extra TREE_TYPE around
  404.     TREE_TYPE (decl) in two places.  Improved comments.  Make DECL be
  405.     consistently of aggregate type.
  406.  
  407.     * cplus-tree.h (lang_type): `type_flags' substructure was not
  408.     multiple of 4 bytes.
  409.  
  410. Fri Dec  1 05:08:57 1989  Michael Tiemann  (tiemann at arkesden)
  411.  
  412.     * integrate.c (try_fold_cc0): Argument to `emit_jump' was wrong:
  413.     called with LABEL_REF rtx instead of underlying CODE_LABEL.
  414.  
  415.     * cplus-class.c (add_virtual_function): Handle case where virtual
  416.     function is declared twice in the same class.
  417.  
  418.     * cplus-decl.c (finish_decl): Length argument to `bcopy' was off
  419.     by one for anonymous aggregate names was off by one.
  420.  
  421. Thu Nov 30 16:29:42 1989  Michael Tiemann  (tiemann at arkesden)
  422.  
  423.     * expr.c (expand_builtin): In BUILTIN_SAVEREGS case, advance
  424.     SAVING_INSNS after noting stores.
  425.  
  426. Wed Nov 29 05:35:59 1989  Michael Tiemann  (tiemann at arkesden)
  427.  
  428.     * cplus-except.c (expand_cplus_reraise): If an exception was not
  429.     on the legal list of exceptions to reraise, don't bother
  430.     protecting the raised object by assigning zero to its pointer.
  431.  
  432.     * cplus-class.c (build_method_call): When calling a non-const
  433.     member function from a const member function, tell which non-const
  434.     member function is being called.  Also, return ERROR_MARK_NODE if
  435.     we are not looking up to complain.
  436.  
  437.     * cplus-type2.c (build_functional_cast): Due to typedefs, we must
  438.     pull NAME from TYPE.
  439.  
  440.     * cplus-typeck.c (build_compound_expr): If TREE_VALUE of list is a
  441.     VAR_DECL, use result of calling `decl_constant_value'.
  442.  
  443.     * stmt.c (expand_end_except): PREV was uninitialized.
  444.  
  445.     * stmt.c (expand_exit_except): New function, like
  446.     `expand_exit_loop'.  Used to explicitly exit an except contour.
  447.     * cplus-parse.y,cplus-except.c: Replace calls to
  448.     `expand_exit_something' with calls to `expand_exit_except'.
  449.     * cplus-decl.c (start_function): If FLAG_HANDLE_EXCEPTIONS, build
  450.     an exception contour around the outermost binding level.
  451.     * cplus-decl.c (finish_function): If FLAG_HANDLE_EXCEPTIONS, clean
  452.     up that countour after the last binding contour goes away.
  453.     * stmt.c (in_{try,except}_block): Added LEVEL parameter.
  454.     * stmt.c (in_exception_handler): Added LEVEL parameter.
  455.     * cplus-except.c: All callers to `in_try_block' as about level 1
  456.     instead of immediate level, because outermost try block doesn't
  457.     really count.
  458.  
  459.     * cplus-except.c (cplus_expand_end_except): Call abort if catching
  460.     unhandled exception at outermost level.
  461.  
  462. Tue Nov 28 06:51:48 1989  Michael Tiemann  (tiemann at arkesden)
  463.  
  464.     * cplus-except.c (expand_cplus_raise): Interface changed to take
  465.     third parameter which is the already-constructed object to be
  466.     raised, allowing `expand_cplus_reraise' to call this function.
  467.  
  468.     * cplus-parse.y (try RERAISE raise_identifiers): Actually
  469.     implement this now.
  470.     * cplus-except.c (expand_cplus_reraise): Ditto.
  471.  
  472.     * cplus-decl.c (init_decl_processing): Initialize LANG_NAME_C and
  473.     LANG_NAME_CPLUSPLUS.  Initialize CURRENT_LANG_NAME to LANG_NAME_C.
  474.     * cplus-class.c (init_class_processing): Initialization of
  475.     LANG_NAME_{C,CPLUSPLUS} was too late here.
  476.  
  477.     * cplus-decl.c (duplicate_decls): If NEWDECL is a FUNCTION_DECL,
  478.     and it was the last object allocated on the permanent_obstack, cut
  479.     the permanent_obstack back to NEWDECL, since we have OLDDECL.
  480.  
  481.     @ The following three changes are conditional on actually defining
  482.     LANG_DECL_PERMANENT in cplus-tree.h.  It is currently not defined
  483.     becuase a good solution for saving lang_decls might require more
  484.     space than the space that could be reclaimed.
  485.  
  486.     @ cplus-tree.h (lang_decl): New bit LANG_DECL_PERMANENT says if
  487.     the lang_decl was allocated on the permanent_obstack.
  488.     @ cplus-lex.c (build_lang_decl):  Set it if appropriate.  New
  489.     variable FREE_LANG_DECL_CHAIN holds previously freed LANG_DECLs.
  490.     @ cplus-decl.c (duplicate_decls):  Add the lang_decl of the old
  491.     decl to FREE_LANG_DECL_CHAIN if it was allocated on the
  492.     permanent_obstack.
  493.  
  494.     * cplus-decl.c (duplicate_decls): Preserve DECL_LANGUAGE when
  495.     NEWDECL is a definition.
  496.     * cplus-decl.c (start_function): Don't set DECL_LANGUAGE here, now
  497.     that it is properly handled in `duplicate_decls'.  Also, set
  498.     DECL_OVERLOADED (DECL1) from DECL_OVERLOADED (OLDDECL).
  499.  
  500. Mon Nov 27 06:30:53 1989  Michael Tiemann  (tiemann at arkesden)
  501.  
  502.     * cplus-method.c (dump_init): Argument to `dump_type' was missing
  503.     in SAVE_EXPR case.
  504.  
  505.     * cplus-class.c (compute_conversion_costs): While it is probably
  506.     an error to permit a call from a const member function to a
  507.     non-const member function, cfront seems to do it, grudginly.
  508.     Change this function to make this conversion cost the heaviest of
  509.     built-in conversion costs, to give behavior that matches cfront.
  510.     This can easily be changed back to error-giving behavior.
  511.     * cplus-class (build_method_call): Give warning if calling to
  512.     non-const member function from const member function.
  513.  
  514.     * cplus-method.c,cplus-class.c: Change name of
  515.     `do_actual_overload' to `build_overload_call', and move the
  516.     function from cplus-method.c to cplus-class.c.  Also, rewrite
  517.     slightly to call `build_decl_overload', removing duplicated code.
  518.     * cplus-typeck.c (build_x_function_call): Change the name of
  519.     called function.
  520.  
  521.     * cplus-tree.c (hash_tree_cons): Typo--set TREE_VIA_PUBLIC twice,
  522.     instead of TREE_VIA_PUBLIC and TREE_VIA_VIRTUAL.
  523.  
  524.     * cplus-decl.c (finish_decl): It is INIT, and not
  525.     DECL_INITIAL (DECL) which holds the real value of DECL's
  526.     initializer.  We need INIT's value for `complete_array_type' to do
  527.     its job.
  528.  
  529.     * expr.c (save_noncopied_parts): Deal with case of having
  530.     `assign_stack_local' return an invalid memory reference.
  531.  
  532.     * cplus-typeck.c (build_component_ref): 11/26 fix was almost
  533.     right, but called `value_member' in first case where should have
  534.     called `assoc_value'.
  535.  
  536.     * cplus-init.c (expand_vec_delete): Lines were reversed in
  537.     multi-dimensional array code.
  538.  
  539.     * version.c: Test release version 1.36.2-
  540.  
  541.     * integrate.c (expand_inline_function): Bug in use of
  542.     CONST_EQUIV_MAP did not work correctly in the presence of loops
  543.     for variables initialized in first basic block but modified within
  544.     a loop body.
  545.  
  546. Sun Nov 26 17:11:08 1989  Michael Tiemann  (tiemann at arkesden)
  547.  
  548.     * cplus-init.c (build_new): Handle case when TRUE_TYPE gets
  549.     ERROR_MARK_NODE, such as when the size expression for an ARRAY_REF
  550.     is ERROR_MARK_NODE.
  551.  
  552.     * cplus-type2.c (digest_init): Catch case where ELEMENT is
  553.     ERROR_MARK_NODE, which avoids calling `comptypes' with
  554.     ERROR_MARK_NODE as our type (recall that TREE_TYPE (ERROR_MARK_NODE)
  555.     is ERROR_MARK_NODE, not NULL_TREE).
  556.  
  557.     * cplus-typeck.c (build_component_ref): Forgot to pull offset from
  558.     association of type once we found the field!  This causes fields
  559.     in two separate baseclasses to overlap when referenced from a
  560.     class deriving from the baseclasses.
  561.  
  562.     * cplus-parse.y (primary, primary_no_id): Recognize
  563.     `SCOPE operator_name'.
  564.  
  565.     * cplus-decl.c (grok_reference_init): Code to permit references to
  566.     arrays was somehow missing.  Also, in the case where DECL is
  567.     TREE_STATIC and the initializer is TREE_LITERAL, no need to call
  568.     `expand_static_init'.
  569.  
  570.     * cplus-tree.h [DECL_OVERLOADED]: User `overloaded_attr' in
  571.     lang_decl to distinguish overloaded functions from nonoverloaded
  572.     ones.
  573.     * cplus-tree.h [DECL_EXTERNAL]: Use TREE_LANG_FLAG_1 instead of
  574.     TREE_LANG_FLAG_3.  The latter was used for TREE_PRIVATE.
  575.  
  576.     * cplus-init.c (expand_vec_delete): Handle multi-dimensional
  577.     arrays.
  578.  
  579.     * cplus-decl.c (duplicate_decls): Copying of DECL_IN_AGGR_P bit
  580.     was backwards.
  581.     * cplus-decl.c (start_decl): And need to turn off DECL_IN_AGGR_P
  582.     when seeing this decl in non-aggr context.  Also, clear
  583.     TREE_EXTERNAL if DECL_EXTERNAL is not set.
  584.  
  585.     * cplus-decl.c (grok_reference_init): Code split from
  586.     `finish_decl' for modularity.
  587.  
  588. Sat Nov 25 06:29:08 1989  Michael Tiemann  (tiemann at teacake)
  589.  
  590.     * cplus-decl.c (grokdeclarator): Was incorrectly rejecting
  591.     class-local typedefs which had things like RID_LONG (thought they
  592.     were storage class specifiers).
  593.  
  594.     * cplus-method.c (report_type_mismatch): Corrected error
  595.     introduced by making INLINE_BUFFER non-static.
  596.  
  597.     * cplus-tree.c (build_exception_variant): Correctly handle case
  598.     when RAISES is NULL_TREE.
  599.  
  600.     * cplus-except.c (lookup_exception_object): Switch to
  601.     permanent_obstack when implicitly declaring an exception object.
  602.  
  603.     * cplus-class.c (instantiate_type): Handle TREE_LIST of
  604.     FUNCTION_DECL in addition to TREE_LIST of TREE_LIST of
  605.     FUNCTION_DECL.  The former is what a BASELINK in disguise.
  606.  
  607.     * cplus-decl.c (grokdeclarator): Don't crash if TYPE ==
  608.     ERROR_MARK_NODE when DECL_CONTEXT == FIELD.  Happens when array
  609.     size is undefined, for example.
  610.  
  611. Fri Nov 24 16:04:44 1989  Michael Tiemann  (tiemann at teacake)
  612.  
  613.     * cplus-search.c (get_baselinks): When we get to end of search
  614.     (i.e., TYPE has only one basetype), propagate BASELINKs.
  615.  
  616.     * cplus-decl.c (shadow_tag): Missing call to
  617.     `end_exception_decls'.
  618.  
  619. Tue Nov 21 23:40:57 1989  Michael Tiemann  (tiemann at teacake)
  620.  
  621.     * cplus-method.c: Change from static allocation of INLINE_BUFFER
  622.     to dynamic, saving 8k static data size.
  623.     * cplus-method.c (fndecl_as_string): Initialize INLINE_BUFFER
  624.     always from BUF.
  625.     * cplus-class.c, cplus-tree.c: Callers of `fndecl_as_string'
  626.     changed.
  627.  
  628. Mon Nov 20 20:56:49 1989  Michael Tiemann  (tiemann at arkesden)
  629.  
  630.     * cplus-class.c (build_method_call): Don't check visibility on
  631.     calls to wrappers.
  632.  
  633.     * cplus-tree.h: Delete bitfields HAS_WRAPPER and NEEDS_WRAPPER.
  634.     Add field for TYPE_WRAP_TYPE.
  635.     * cplus-decl.c, cplus-class.c: Set fields accordingly
  636.     * cplus-class.c (build_method_call): Call `get_wrapper' if we need
  637.     to be wrapping a function call.
  638.     * cplus-search.c (get_wrapper): Implement this function.
  639.  
  640. Sat Nov 18 05:16:22 1989  Michael Tiemann  (tiemann at teacake)
  641.  
  642.     * cplus-lex.c (check_newline): Recognize (but apologize about)
  643.     #pragma newworld.
  644.  
  645.     * cplus-method.c (build_decl_overload): Compact encoding for
  646.     member functions ifndef LONGERNAMES.
  647.     * cplus-dem.c (cplus_demangle,do_args): Deal with different
  648.     encoding ifndef LONGERNAMES.
  649.  
  650.     * cplus-tree.c (list_has_lookup_or_cons): New function optimizes
  651.     most common case in parsing.
  652.     * cplus-parse.y: Call in in place of `hash_tree_chain (_, NULL_TREE)'.
  653.  
  654.     * cplus-parse.y, cplus-lex.c: Gather statistics on tokens and
  655.     reductions.
  656.  
  657.     * cplus-class.c (instantiate_type): Forgot to check COMPLAIN
  658.     before complaining.
  659.  
  660.     * cplus-init.c (build_new,build_vec_delete): Call
  661.     do_pending_stack_adjust before building and after finalizing
  662.     RTL_EXPR.  Also removed bogus construct
  663.  
  664.            emit_insn (gen_sequence ());
  665.  
  666.     which was causing circular rtl to be output.  (Thanks to rms for
  667.     identifying the problem!).
  668.     * cplus-type2.c (make_merged_ref): Same change.
  669.     * cplus-parse.y (except_stmts): Same change.
  670.  
  671.     * cplus-init.c (get_member_function): Wrap a SAVE_EXPR around the
  672.     address of MEMBER.
  673.  
  674. Fri Nov 17 20:11:19 1989  Michael Tiemann  (tiemann at teacake)
  675.  
  676.     * cplus-type2.c (store_init_value)
  677.  
  678.     * cplus-dem.c (do_type): Initialize NON_EMPTY.
  679.  
  680. Tue Nov 14 00:19:31 1989  Michael Tiemann  (tiemann at arkesden)
  681.  
  682.     * cplus-init.c (build_vec_delete): Call `emit_note' in case no
  683.     code is emitted by `expand_vec_delete'.
  684.  
  685.     * cplus-parse.y (operator_name): If the operator name is
  686.     erroneous, build something signifying that fact, rather than just
  687.     returning NULL_TREE.
  688.  
  689.     * cplus-typeck.c (target_type): New function.  Returns the target
  690.     type of TYPE.
  691.     * cplus-decl.c (finish_decl): Call `target_type' to figure out the
  692.     built-in type that DECL is based on.  If we find it to be
  693.     ANON_AGGRNAME_P, then we must change it, since nothing else will,
  694.     and the compiler will go into loops if expand_inline_function trys
  695.     to push it back into the environment.
  696.  
  697.     * cplus-parse.y (primary): Need to do `lookup_name' on operator
  698.     names that come through here.
  699.  
  700.     * stmt.c (expand_end_try): Jump to after label to avoid falling
  701.     through into default handler.
  702.  
  703.     * cplus-decl.c (define_label): Don't complain about jumps past
  704.     initialziation of compiler-generated temporaries.  They can't be
  705.     accessed, and by the time we get to the label, they should be
  706.     cleaned up.
  707.  
  708. Mon Nov 13 02:34:58 1989  Michael Tiemann  (tiemann at arkesden)
  709.  
  710.     * cplus-init.c (get_member_function): If EXP_ADDR was something
  711.     hairy (like a CALL_EXPR), make EXP indirect from it.  This saves
  712.     writing out twice the code (once for each branch of the
  713.     conditional).
  714.  
  715.     * cplus-dem.c (cplus_demangle): Recognize virtual function tables.
  716.     * Also, handle operator* and operator->().
  717.  
  718.     * cplus-class.c (finish_struct): Don't warn about all class
  719.     members being private if there are public baseclasses.
  720.  
  721.     * cplus-decl.c (grokdeclarator): Catch case where friend function
  722.     is declared with method qualifiers.
  723.  
  724.     * cplus-typeck.c (commontype): Get the right value for BASETYPE in
  725.     METHOD_TYPE case.
  726.  
  727.     * cplus-method.c (build_opfncall): TYPE1 was being initialized too
  728.     late.
  729.  
  730.     * cplus-dem.c[USG]: Use this instead of #ifndef sequent.
  731.  
  732. Sun Nov 12 01:35:08 1989  Michael Tiemann  (tiemann at arkesden)
  733.  
  734.     * integrate.c (note_integrated): New function.  If insn generated
  735.     used constants, check that it is legit.  If not, delete it and
  736.     return zero to caller, indicating that the caller should try
  737.     again.  If successful, set RTX_INTEGRATED_P.
  738.  
  739.     * cplus-tree.c (layout_vbasetypes): Use `int' return type to
  740.     advantage.
  741.  
  742.     * cplus-init.c (build_delete): Don't abort if TYPE ==
  743.     ERROR_MARK_NODE.  It can happen.
  744.  
  745.     * integrate.c: Use "iteration numbering" to propagate constants
  746.     through inline function expansion.
  747.  
  748.     * stmt.c: Added exception stmts to nesting stack.
  749.     * cplus-except.c: Move appropriate stuff out of here.
  750.  
  751. Sat Nov 11 10:10:59 1989  Michael Tiemann  (tiemann at arkesden)
  752.  
  753.     * integrate.c: Make `expand_inline_function' smart enough to use
  754.     constant when safe, and not when not.
  755.  
  756.     * integrate.c: Merged changes from rms as of today.
  757.     * varasm.c: Merged changes from rms as of today.
  758.  
  759.     * cplus-except.c: Use variable TRY_DEPTH to determine whether we
  760.     are inside a TRY block or not.
  761.     * cplus-except.c (cplus_expand_{start,end}_try):
  762.     Increment/decrement that variable.
  763.     * cplus-except.c (expand_cplus_raise_stmt): If TRY_DEPTH is
  764.     nonzero, then simply exiting the try block does all the right
  765.     things.  Otherwise, we must use `longjmp'.
  766.  
  767.     * cplus-init.c (build_new): Don't use the RTL_EXPR hack for static
  768.     initializations.
  769.  
  770.     * ld.c (write_output): Unconditionally remove the old file in case
  771.     another owns it but user has write permission.
  772.  
  773.     * cplus-decl2.c (finish_file): Set DECL_PRINT_NAME of file
  774.     clean/initialization functions to things we might want to print.
  775.  
  776. Fri Nov 10 19:08:51 1989  Michael Tiemann  (tiemann at arkesden)
  777.  
  778.     * cplus-tree.h: Get rid of EXCEPTION_LABEL_DECL, no longer needed.
  779.     Add EXCEPTION_THROW_DECL.  This VAR_DECL is used to determine
  780.     whether to throw from a binding contour using the exception
  781.     handling machinery.
  782.     * cplus-decl.c, cplus-except.c: Changes to adapt to new model.
  783.  
  784.     * tree.c (build_op_identifier): #if 0 in this file.
  785.     * cplus-lex.c (build_op_identifier): define this function here.
  786.     Change interface to take `tree_code' arguments instead of `tree'
  787.     arguments.  Use memoizing table to preserve previously allocated
  788.     nodes.
  789.     * cplus-parse.y, cplus-method.c: Callers changed.
  790.     * cplus-lex.c (build_operator_fnname): Can't get by on
  791.     side-effecting an OP_IDENTIFIER's TREE_CODE anymore.  Change
  792.     interface to pass OP_IDENTIFIER node in as a tree*, and set that.
  793.     * cplus-decl2.c (grokopexpr): Must also take DECLARATOR in as
  794.     pointer.
  795.  
  796.     * cplus-init.c (build_new): After calling `start_sequence', prime
  797.     the insn pump by calling `emit_note' to emit a NOTE_INSN_DELETED.
  798.  
  799. Wed Nov  8 15:54:32 1989  Michael Tiemann  (tiemann at teacake)
  800.  
  801.     * cplus-type2.c (build_functional_cast): Move from cplus-class.c
  802.     to this file.
  803.  
  804.     * cplus-class.c (build_functional_cast): Don't assume that
  805.     TYPE_NAME (TYPE) is a TYPE_DECL; it might be an IDENTIFIER_NODE.
  806.  
  807.     * gcc.c (main): Print out the name `g++' instead of `gcc' until
  808.     the merge is complete.
  809.  
  810. Tue Nov  7 14:56:50 1989  Michael Tiemann  (tiemann at teacake)
  811.  
  812.     * cplus-init.c (build_new): Initialize RVAL if SOS.
  813.  
  814. Mon Nov  6 00:51:43 1989  Michael Tiemann  (tiemann at arkesden)
  815.  
  816.     * crt1.c: Changes from Eirik Fuller (Cornell Theory Center) to fix
  817.     incremental linking.
  818.     * gnulib3.c (__do_global_cleanup): Also from Eirik: fixed braino
  819.     that was not reinitializing __DLI.
  820.  
  821.     * cplus-method.c (build_overload_name): Mangle member functions
  822.     with qualifiers differently than member functions without
  823.     qualifiers.  Also, add 'F' before argument list for METHOD_TYPE,
  824.     since cfront 2.0 seems to do so.
  825.     * cplus-method.c (dump_type_suffix): Make formatting of these
  826.     kinds of METHOD_TYPEs right.
  827.     * cplus-dem.c (do_type): Grok these changes.
  828.  
  829.     * cplus-except.c (exception_object_name): Don't crash in case
  830.     of ``raise all'', which comes encoded as VOID_TYPE_NODE.
  831.     @@ Handle it correctly in next release.
  832.  
  833.     * cplus-decl2.c (grok_method_quals): New function.  Incorporate
  834.     `const' and `volatile' qualifiers into FUNCTION_DECLs and
  835.     TYPE_DECLs.  Uses code broken out of `grokclassfn'.
  836.     * cplus-decl2.c (grokclassfn): Caller changed.
  837.     * cplus-decl.c (grokdeclarator): Call `grok_method_quals' when
  838.     QUALS is non-zero in declarator grokking loop.
  839.  
  840. Sat Nov  4 20:21:54 1989  Michael Tiemann  (tiemann at arkesden)
  841.  
  842.     * cplus-init.c (build_new): If TYPE_NEEDS_CONSTRUCTING (TYPE),
  843.     then always wrap RVAL in an RTL_EXPR, since we don't know that we
  844.     aren't one of the arms of a ?: operation.  RVAL can now be a
  845.     SAVE_EXPR (normally) or a VAR_DECL (in the case of array
  846.     initialization).
  847.  
  848.     * cplus-init.c (build_new): Fix braino that was causing array
  849.     types to be collapsed into their element types, causing
  850.     `build_new' to return a point to the element type, rather then a
  851.     pointer to the array type.
  852.  
  853.     * cplus-decl2.c (grokfield): Check DECL_NAME (VALUE) before
  854.     dereferencing it.
  855.  
  856.     * cplus-init.c (expand_vec_init): Do not fail to initialize
  857.     element of an array which receive default initialization.
  858.  
  859.     * cplus-type2.c (digest_init): If TYPE needs constructing,
  860.     don't convert INIT to TYPE.  The only time when this happens
  861.     is when called upon to initialize an ARRAY_TYPE, and
  862.     `expand_vec_init' will handle that case.
  863.  
  864.     * cplus-class.c (build_method_call): Error reporting for bad
  865.     argument list was screwed for static member functions in static
  866.     call context.
  867.  
  868.     * config.g++: Add MIPS-based configurations.
  869.  
  870.     * toplev.c: Make up for systems which do not have unistd.h (like
  871.     many BSD systems).
  872.     * Makefile: Add HAVE_UNISTD_H flag.
  873.  
  874.     * cplus-dem.c: Sequentize the code.
  875.  
  876.     * cplus-init.c (expand_cplus_expr_stmt): Warn if statement is just
  877.     a reference to, and not a call of, some function.
  878.  
  879. Thu Nov  2 10:03:50 1989  Michael Tiemann  (tiemann at arkesden)
  880.  
  881.     * cplus-method.c (build_overload_name): Don't crash if we built a
  882.     TREE_LIST which contains VOID_TYPE_NODE and which is not
  883.     VOID_LIST_NODE.  This happens if one of the parameters is of type
  884.     VOID_TYPE.
  885.  
  886.     * stmt.c (expand_return): Even when RETVAL has type VOID_TYPE, we
  887.     must expand it (it may be a call to another void function).
  888.  
  889.     * integrate.c (copy_rtx_and_substitute): Moved one to many insns
  890.     to BEFORE_INLINE_FP_RTX.
  891.  
  892.     * cplus-typeck.c (convert_for_initialization,actualparameterlist):
  893.     Don't defaultly convert ARRAY_TYPE when converting to
  894.     REFERENCE_TYPE.
  895.  
  896. Wed Nov  1 04:43:46 1989  Michael Tiemann  (tiemann at teacake)
  897.  
  898.     * stmt.c (init_function_start): Initialize MAX_PARM_REG to
  899.     FIRST_PSEUDO_REGISTER.
  900.  
  901.     * cplus-init.c (expand_vec_init): This function can be called to
  902.     initialize a non-aggregate vector.
  903.  
  904. Tue Oct 31 13:38:42 1989  Michael Tiemann  (tiemann at arkesden)
  905.  
  906.     * cplus-type2.c (process_init_constructor): Don't even try
  907.     initializing a structure from EMPTY_INIT_NODE.
  908.  
  909.     * cplus-init.c (build_new): Handle case where SAVE_EXPR_RTL of
  910.     new'd value is 0 by putting it CONST0_RTX.
  911.  
  912.     * cplus-typeck.c (build_component_ref): If the COMPONENT_REF is
  913.     really a reference to a member function, do the right thing if the
  914.     member function is virtual.
  915.  
  916. Mon Oct 30 00:39:18 1989  Michael Tiemann  (tiemann at arkesden)
  917.  
  918.     * cplus-class.c (build_method_call): Removed code that seemed to
  919.     build (superflouously) an INDIRECT_REF for INSTANCE just before
  920.     heading to found/found_and_ok (where INSTANCE was just
  921.     reinitialized).  Also, fixed bug so that if INSTANCE was of fixed
  922.     type, that fact remained known even if INSTANCE_PTR became more
  923.     distanct due to going through a NOP_EXPR.
  924.  
  925.     * cplus-init.c (get_member_function): Add parameter EXP_ADDR_PTR
  926.     which is a pointer to the tree representing the address of EXP.
  927.     Also, add hairy code which does the right thing wrt. modifying
  928.     `this' pointer when it is argument to call.
  929.     @@ This modification causes GNU C++ to generate stupid
  930.     conditional-branch code when optimizing.  Hopefully future
  931.     versions of the optimizer will understand and optimize it.
  932.     * cplus-typeck.c (build_x_function_call): Caller changed.
  933.  
  934.     * cplus-tree.h (lang_type): Added new field GOT_SEMICOLON to
  935.     TYPE_FLAGS field, to record whether a type has been `finished' or
  936.     not.  Attempt to catch bugs like `struct s { .. } main () { .. }'.
  937.     * cplus-parse.y (various rules): Add call to `note_got_semicolon'.
  938.     * cplus-decl.c (start_function): Check that we have a `finished'
  939.     type.
  940.     * cplus-lex.c (note_got_semicolon): Set the bit here.
  941.     * cplus-class.c (finish_struct): Whenever we start afresh with a
  942.     class type, zero the bit here.
  943.  
  944.     * cplus-type2.c: Rename file cplus-typeck2.c to fit brain-damaging
  945.     SVID 14 char name limit.
  946.  
  947.     * cplus-typeck.c (build_modify_expr): Handle case where assignment
  948.     comes from friend, rather than member function.
  949.  
  950.     * cplus-tree.c (lang_printable_name): Handle case where DECL's
  951.     language specific field is nonexistent.
  952.     * cplus-method.c (fndecl_as_string): Here too.
  953.  
  954.     * cplus-decl.c (finish_decl): Initialization of a reference from
  955.     `*this' was falling down because nodes for `$this' were getting
  956.     shared too much.
  957.  
  958.     * cplus-tree.h (TREE_HAS_CONSTRUCTOR): Reincarnate use of this
  959.     flag--for SAVE_EXPR it means that underneath lies a call to
  960.     `new' for a given type.
  961.     * cplus-init.c (build_new): Set the flag.
  962.     * cplus-method.c (dump_init): Test it.
  963.  
  964.     * cplus-tree.h (PARM_DECL_EXPR): Use this flag to distinguish
  965.     parsing initializers for PARM_DECLs from initializers for global
  966.     variables.
  967.     * cplus-decl2.c (finish_file): Don't emit anything from
  968.     STATIC_AGGREGATES that was really just for default parameters.
  969.     * cplus-decl.c (grokparms): Set PARM_DECL_EXPR on SAVE_EXPRs.
  970.     * cplus-method.c (dump_init): Same.
  971.  
  972. Sun Oct 29 23:23:48 1989  Michael Tiemann  (tiemann at arkesden)
  973.  
  974.     * cplus-method.c (build_opfncall): Don't check visibility here for
  975.     operators `new' and `delete' unless within a constructor or
  976.     destructor.
  977.     * cplus-decl.c (finish_function): Add checks for visibility of
  978.     those operators here instead.
  979.  
  980.     * cplus-decl2.c (groktypefield): Handle case where field name
  981.     conflicts with a typedef.
  982.  
  983. Fri Oct 27 01:02:20 1989  Michael Tiemann  (tiemann at arkesden)
  984.  
  985.     * cplus-search.c (get_virtuals_named_this): Return a baselink
  986.     instead of a FUNCTION_DECL.  Also, walk through FIELDS as
  987.     baselinks.  I.e., use `next_baselink' instead of TREE_CHAIN.
  988.  
  989.     * cplus-search.c (get_first_matching_virtual): Caller changed.
  990.  
  991. Thu Oct 26 16:09:07 1989  Michael Tiemann  (tiemann at arkesden)
  992.  
  993.     * cplus-search.c (get_first_matching_virtual): Only complain about
  994.     a particular property of a virtual function once.
  995.  
  996.     * cplus-class.c (finish_struct): If ASSOC winds up being zero,
  997.     don't frob the vtable.
  998.  
  999.     * cplus-decl.c (shadow_tag): Handle case where exception does not
  1000.     have any fields.
  1001.     * cplus-parse.y (component_decl): Handle case where exception does
  1002.     not have any fields.
  1003.  
  1004.     * cplus-parse.y (structsp): Call `finish_exception' with only two
  1005.     parameters.
  1006.  
  1007.     * cplus-parse.y (stmt): Forgot ';' after `RAISE' stmt.
  1008.  
  1009.     * cplus-class.c: Gather statistics on number of elments in virtual
  1010.     function tables, number of entries we build for them, and number
  1011.     of virtual function table entries we search using linear lookup.
  1012.  
  1013.     * cplus-parse.y (aggr,opt.component_decl_list): Call
  1014.     `build_tree_list' instead of `decl_tree_list', because of nested
  1015.     structures.  Would be better to make TEMP_DECL_OBSTACK pushable
  1016.     like the momentary obstack, but we don't for now.
  1017.  
  1018. Tue Oct 24 06:26:13 1989  Michael Tiemann  (tiemann at arkesden)
  1019.  
  1020.     * integrate.c (copy_rtx_and_substitute): Don't change something to
  1021.     a memory address unless it really is `memory_address_p'.
  1022.  
  1023.     * cplus-decl.c (finish_decl): Handle array initialization if type
  1024.     of array needs constructor.  Also, implement initialization
  1025.     without INIT0 crutch.
  1026.     * cplus-init.c (expand_vec_init): Handle array initialization from
  1027.     {...} where type of array needs constructor.
  1028.  
  1029.     * cplus-typeck.c (build_binary_op_nodefault): Make compiler give
  1030.     error, not warning, if comparing pointers with integers.
  1031.  
  1032.     * cplus-typeck.c (build_component_ref): Call `lookup_fnfields' to
  1033.     get a list of methods.
  1034.  
  1035. Mon Oct 23 17:29:03 1989  Michael Tiemann  (tiemann at arkesden)
  1036.  
  1037.     * cplus-tree.h (lang_decl): Add bit `COMPILER_GENERATED' to
  1038.     indicate whether this FUNCTION_DECL was generated automatically by
  1039.     the compiler.
  1040.     * cplus-lex.c (cons_up_dtor_for_type): Set this bit.
  1041.     * cplus-decl.c (redeclaration_error_message): Give better error
  1042.     message if user redeclares something that was implicitly created
  1043.     by the compiler.
  1044.  
  1045.     * cplus-decl.c (finish_decl): Test DECL_LANG_SPECIFIC before
  1046.     testing DECL_IN_AGGR_P in case of init-free reference decl.
  1047.  
  1048. Sat Oct 21 10:29:09 1989  Michael Tiemann  (tiemann at arkesden)
  1049.  
  1050.     * cplus-class.c (build_method_call): Forgot to increment b_or_d as
  1051.     we go through class hierarchy.  Probably fell out as a result of
  1052.     `next_baselink' change on Friday, Oct 13.
  1053.  
  1054.     * cplus-cvt.c (build_up_reference): When calling
  1055.     `convert_to_nonzero_pointer', use TYPE_MAIN_VARIANT so that
  1056.     TYPE_POINTER_TO is defined.
  1057.  
  1058.     * cplus-search.c ({push,pop}_memoized_context): Plug memory leak
  1059.     by freeing pushing and popping the TYPE_OBSTACK irrespective of
  1060.     whether we are memoizing lookups or not.
  1061.  
  1062.     * cplus-decl2.c (grokclassfn): Don't make `this' TREE_READONLY
  1063.     inside of destructors.
  1064.  
  1065.     * cplus-search.c (get_abstract_virtuals): New function.  Returns
  1066.     the list of virtual functions that are considered abstract for a
  1067.     given type (i.e., those which are ` = 0' in declaration).
  1068.     * cplus-class.c (finish_base_struct): Call it.
  1069.  
  1070.     * All GNU C++ files: change names containing `UNINHERIT*' to names
  1071.     containing `ABSTRACT'.  Eliminate use of
  1072.     CLASSTYPE_HAS_ABSTRACT_VIRTUALS in favor of testing
  1073.     CLASSTYPE_ABSTRACT_VIRTUALS directly.
  1074.  
  1075.     * cplus-decl.c (start_function): Handle case where user names and
  1076.     internal names conflict.
  1077.  
  1078.     * cplus-typeck.c (build_conditional_expr): Put type instantiation
  1079.     back in.
  1080.  
  1081.     * cplus-decl.c (start_function): Use DECL_STATIC_CONTEXT instead
  1082.     of DECL_CONTEXT for pushing into context of static function.
  1083.  
  1084.     * cplus-decl.c (auto_function): Like `builtin_function', but
  1085.     builds an overloadable function.
  1086.     * cplus-decl.c (init_decl_processing): Call it for __builtin_new,
  1087.     __builtin_delete and similar functions.
  1088.  
  1089. Fri Oct 20 02:22:06 1989  Michael Tiemann  (tiemann at arkesden)
  1090.  
  1091.     * cplus-decl.c (finish_decl): Set TREE_USED bit of DECL if DECL is
  1092.     a const VAR_DECL at TOPLEVEL.
  1093.  
  1094.     * cplus-class.c (modify_vtable_entry): Still more fixes to code
  1095.     which computes derived vtable.
  1096.  
  1097. Thu Oct 19 11:14:55 1989  Michael Tiemann  (tiemann at arkesden)
  1098.  
  1099.     * cplus-class.c (finish_struct): Move code that sets
  1100.     TYPE_USES_MULTIPLE_INHERITANCE from here...
  1101.     * cplus-decl.c (xref_tag): ...to here.
  1102.  
  1103.     * cplus-decl.c (finish_decl): Oct 12 change to implement
  1104.     initialization of class members so that their initializers could
  1105.     use private members did not test DECL sufficiently.  In addition
  1106.     to checking DECL_CONTEXT, must also check that TREE_CODE (DECL) ==
  1107.     VAR_DECL.  Otherwise redeclaration of member functions cause
  1108.     crashes.
  1109.  
  1110. Tue Oct 17 03:34:05 1989  Michael Tiemann  (tiemann at arkesden)
  1111.  
  1112.     * cplus-method.c (hack_identifier): Use `error', not
  1113.     `error_with_decl' to report that a non-static member is being
  1114.     referenced in a static member function.
  1115.  
  1116.     * cplus-decl.c (duplicate_decls): TREE_INLINE was not being set
  1117.     for OLDDECL, which is really where it matters.
  1118.  
  1119.     * cplus-typeck2.c (merge_component_comparisons): Track TEM1 in
  1120.     addition to TEM0 in loop which computes BITPOS0.
  1121.  
  1122.     * cplus-decl2.c (grokfield): Set CLASSTYPE_LOCAL_TYPEDECLs from
  1123.     CURRENT_CLASS_TYPE rather than DECL_CONTEXT (VALUE), since the
  1124.     latter is not set up for TYPE_DECLs.
  1125.  
  1126.     * cplus-decl.c (xref_tag): Set CLASSTYPE_DECLARED_CLASS each time
  1127.     we see an xref to this tag until we see the actual type defined
  1128.     for this tag.
  1129.  
  1130. Mon Oct 16 01:48:27 1989  Michael Tiemann  (tiemann at arkesden)
  1131.  
  1132.     * cplus-tree.h (DECL_VIRTUAL_P): If set in an IDENTIFIER_NODE, it
  1133.     means that somebody has defined a virtual function with this name.
  1134.     * cplus-decl.c (grokfndecl): Set it.
  1135.     * cplus-search.c (get_first_matching_virtual): Use it.
  1136.  
  1137.     * cplus-decl.c (cplus-tree.h): Define DECL_EXTERNAL as synonym for
  1138.     TREE_LANG_FLAG_3, which means for a VAR_DECL to mean that `extern'
  1139.     was specified in for that VAR_DECL.
  1140.     * cplus-decl.c (grokvardecl): Set DECL_EXTERNAL.
  1141.     * cplus-decl.c (duplicate_decls): Set TREE_PUBLIC of `const'
  1142.     variables based on TREE_STATIC and DECL_EXTERNAL.
  1143.  
  1144. Sun Oct 15 00:44:01 1989  Michael Tiemann  (tiemann at arkesden)
  1145.  
  1146.     * cplus-decl.c (start_function): Set CURRENT_EXTERN_INLINE from
  1147.     TREE_PUBLIC of DECL1 if DECL1 came pre-parsed.
  1148.  
  1149.     * cplus-decl2.c (finish_file): Don't write out inline functions
  1150.     which had their address taken if they were declared
  1151.     `extern inline'.
  1152.  
  1153.     * cplus-decl.c (grokdeclarator): Don't set TREE_PUBLIC based on
  1154.     INLINEP here.  Also, don't treat RID_INLINE as being a storage
  1155.     class for `multiple storage classes' error message.
  1156.     * cplus-decl2.c (grokfield): Do it instead here.
  1157.     * cplus-init.c (do_friend): And here.
  1158.     * cplus-decl.c (duplicate_decls): And change this to more match
  1159.     how GCC does things.
  1160.  
  1161.     * cplus-lex.c [USG_STDIO]: Use this instead of USG, for turncoats
  1162.     who have enough of System V that their stdio is broken, and too
  1163.     much Berkeley for USG to be the right thing.
  1164.  
  1165.     * cplus-decl.c (grokdeclarator): Grok declarations of the form
  1166.     `X x(args)[size]' to mean ARGS is an initializer to the array
  1167.     constructor for X[SIZE].
  1168.     * cplus-decl2.c (finish_file): Handle new case.
  1169.  
  1170.     * cplus-method.c (build_opfncall): Don't abort if user makes a bad
  1171.     call to operator new.  It's not the compiler's fault.
  1172.  
  1173.     * cplus-init.c (finish_base_init): Unmark virtual baseclasses
  1174.     which have explicit initializers.
  1175.  
  1176.     * cplus-init.c (expand_aggr_init_1): Change PROTECT parameter to
  1177.     FLAGS parameter.  All callers changed.
  1178.  
  1179.     * cplus-decl.c (finish_function): In destructor code, it is
  1180.     CLASSTYPE_VSIZE, not TYPE_VIRTUAL_P, which is the operative
  1181.     value to test when building base destructor code.  See Sept 1
  1182.     change for more info.
  1183.  
  1184.     * cplus-parse.y (unary_expr): Arguments to build_vbase_delete were
  1185.     wrong: was passing POINTER_TYPE and address when should have been
  1186.     passing object type and object.
  1187.  
  1188. Sat Oct 14 06:45:34 1989  Michael Tiemann  (tiemann at arkesden)
  1189.  
  1190.     * stmt.c (expand_anon_union_decl): For anonymous unions in memory,
  1191.     don't call `change_address'.  Just cast the memory reference
  1192.     ourselves.
  1193.  
  1194.     * cplus-typeck2.c (store_init_value): Don't test PEDNATIC to see
  1195.     whether to permit initialization of static variable from
  1196.     non-constant, since C++ 2.0 defines it to work.
  1197.  
  1198.     * cplus-init.c (expand_aggr_init_1): PARM_SLOTS was allocating
  1199.     sizeof (char) instead of sizeof (struct rtx_def*).
  1200.  
  1201.     * cplus-decl.c (grokfndecl): Call to `get_first_matching_virtual'
  1202.     must be followed by code which, under certain cases, goes all the
  1203.     way down the inheritance hierarchy to match the virtual function.
  1204.     Otherwise, the wrong virtual function tables come in to play when
  1205.     the time comes to reconcile them (in modify_vtable_entry).  Note
  1206.     that the call to `get_first_matching_virtual' does the right thing
  1207.     within `finish_struct'.  In that case, since we pull BASE_FNDECL
  1208.     from a virtual base class's virtual function table, there is no
  1209.     issue where it should be thought of as coming from.
  1210.  
  1211.     * cplus-search.c (rank_mi_virtuals): Spurious TREE_TYPE made it
  1212.     look like we were trying to compare PARM_DECLs instead of _TYPE
  1213.     nodes in our list at some time.
  1214.  
  1215.     * cplus-search.c (get_first_matching_virtual): Friday the 13th
  1216.     change was wrong.  Instead, make `get_first_matching_virtual'
  1217.     handle the instance variable itself, and call `compparms' as
  1218.     before.
  1219.  
  1220.     * cplus-lex.c (reinit_parse_for_method): Null character was being
  1221.     inserted if USG hack to round up buffer length was being used.
  1222.  
  1223.     * cplus-class.c (compute_conversion_costs): When trying a type
  1224.     conversion, use the actual type that the function wants.  No
  1225.     reference-bashing here!
  1226.  
  1227.     * cplus-search.c: Add a new obstack BRIDGE_OBSTACK which contains
  1228.     the class declarations across scopes.  This is an alternative to
  1229.     building their lists on the permanant_obstack.
  1230.     * cplus-search.c (push_search_level): Record the obstack for which
  1231.     this level was pushed.
  1232.     * cplus-search.c (pop_search_level): Remove OBSTACK parameter.
  1233.     Get that value from the search level that is being popped.
  1234.  
  1235.     * cplus-tree.h (lang_type): Add a slot for the instance variable.
  1236.     * cplus-decl.c (start_function): Use it.
  1237.  
  1238.     * tree.c (build_nt0): New function.  Use this to build declarators
  1239.     instead of `build_nt'.  Uses new obstack `temp_decl_obstack'.
  1240.  
  1241.     * cplus-cvt.c (build_type_conversion): Distinguish void* from
  1242.     const void* if we are trying to convert from some arbitrary
  1243.     pointer to a void* variant.
  1244.  
  1245.     * cplus-class.c (finish_struct_bits): New function.  Code broken
  1246.     out of `finish_struct'.  Extend to handle both conversions to
  1247.     const pointers and conversions to non-const pointers.
  1248.  
  1249.     * cplus-tree.h (lang_type):  Extend to handle both conversions to
  1250.     const pointers and conversions to non-const pointers.
  1251.  
  1252.     * cplus-decl.c (start_function): FNTYPE was not re-set after
  1253.     calling `pushdecl'.  Consequently, static member functions with
  1254.     default arguments were breaking.
  1255.  
  1256.     * cplus-class.c (pushclass): When pushing tags into the class
  1257.     binding level, push the TYPE_DECL, not the _TYPE into the
  1258.     IDENTIFIER_CLASS_VALUE slot.
  1259.  
  1260.     * cplus-method.c (fndecl_as_string): Don't skip first parameter if
  1261.     FNDECL is a static member function.
  1262.  
  1263.     * gplus.gperf [CATCH]: Add it.
  1264.  
  1265.     * cplus-init.c (build_member_ref): Nodes returned from
  1266.     lookup_fnfields are not saved on the permanent obstack, regardless
  1267.     of CURRENT_OBSTACK.  This is usually ok, since they are usually
  1268.     only used as a structure through which search machinery will
  1269.     traverse looking for values that do live on the permanent obstack.
  1270.     One exception is when `build_member_ref' builds an expression
  1271.     which requires type instantiation at top-level.
  1272.  
  1273.     * cplus-decl.c (finish_decl): Give better error messages for
  1274.     initialization of references, and remove invalid messages as well.
  1275.     Initialization of type-qualified references is different than
  1276.     initialization of type-qualified pointers in the following way:
  1277.     you can initialization a `X&' from a `const X&', but you cannot
  1278.     initialize a `X*' from a `const X*'.  This is because the compiler
  1279.     can convert the `const X&' to a `const X', create a new temporary,
  1280.     and take a reference from that.
  1281.  
  1282.     * cplus-init.c (is_friend): In testing for friendly classes, allow
  1283.     for static member functions to be considered friends.
  1284.  
  1285. Fri Oct 13 00:03:18 1989  Michael Tiemann  (tiemann at arkesden)
  1286.  
  1287.     * cplus-decl.c (grokdeclarator): If DECL_CONTEXT is FIELD for
  1288.     building a TYPE_DECL, allocate using `build_lang_field_decl'
  1289.     instead of `build_decl'.
  1290.  
  1291.     * cplus-decl.c (xref_tag): Undo Sept 10 change.  It causes
  1292.     problems for InterViews.  Better to work around in ET++.
  1293.  
  1294.     * cplus-decl.c (lookup_name): When looking up NAME, if
  1295.     CURRENT_CLASS_TYPE is being defined, check its baseclasses for a
  1296.     definition of a TYPE_DECL.
  1297.  
  1298.     * cplus-decl.c (grok_enum_decls): Return DECL, not NULL_TREE if
  1299.     TYPE has already been recorded.
  1300.  
  1301.     * cplus-search.c (dfs_pushdecls): Push class-local TYPE_DECLs into
  1302.     IDENTIFIER_CLASS_VALUEs.
  1303.  
  1304.     * cplus-typeck.c (c_expand_return): Call `expand_cleanups_to' with
  1305.     NULL argument in case the return value generated cleanups for its
  1306.     call.
  1307.  
  1308.     * stmt.c (expand_anon_union_decl): Fixed so that MEM anon unions
  1309.     are correctly handled.
  1310.  
  1311.     * cplus-decl2.c (finish_anon_union): Handle non-global static
  1312.     anonymous unions.
  1313.  
  1314.     * cplus-decl.c (shadow_tag): Change int variable OK to enum
  1315.     tree_code OK_CODE, remembering the value of the code we though was
  1316.     ok.  This avoids being confused when other legitimate DECLSPECS
  1317.     (such as `static') appear after one like `union ...'.
  1318.  
  1319.     * cplus-class.c (popclass): When popping from a class's scope,
  1320.     back to another class's scope, restore CURRENT_VTABLE_DECL only if
  1321.     we had one before.
  1322.  
  1323.     * cplus-decl2.c (grokfield): Push TYPE_DECL into class level as
  1324.     soon as we see it.
  1325.  
  1326.     * cplus-class.c (instantiate_type): In ADDR_EXPR case, complain if
  1327.     type we are instantiating to is not POINTER_TYPE.
  1328.  
  1329.     * cplus-decl.c (start_method): Call `preserve_data' to save the
  1330.     parameters (which were read into the maybepermanent obstack).
  1331.  
  1332.     * cplus-typeck2.c (digest_init): Handle case of union with
  1333.     constructor.
  1334.  
  1335.     * cplus-init.c (build_member_ref): Vestigial bug from change in
  1336.     representation of method lists (from list of lists to list of
  1337.     chains).
  1338.  
  1339.     * cplus-class.c (instantiate_type): Rewrite TREE_LIST case to use
  1340.     `next_baselink' when appropriate, and to try overloading based on
  1341.     non-member functions if that looks appropriate.
  1342.  
  1343.     * cplus-search.c (next_baselink): New function.  Contains code
  1344.     broken out of `build_method_call' to advance to next chain of
  1345.     FUNCTION_DECLs.
  1346.  
  1347.     * cplus-init.c (build_member_ref): If member ref is a reference to
  1348.     non-unique member function, return a BASELINK (which is a list of
  1349.     lists) rather than a list containing just that type's methods with
  1350.     that name.
  1351.  
  1352.     * cplus-init.c (resolve_member_ref): Handle uninstantiated method
  1353.     types.
  1354.  
  1355.     * cplus-decl.c ({start,finish}_decl): Call pushclass/popclass for
  1356.     decls which are static class members, in order to perform
  1357.     visibility computations for initializers correctly.
  1358.     * cplus-decl.c (grokvardecl): If static class member, set
  1359.     DECL_CONTEXT of the decl to the containing class type.
  1360.  
  1361.     * cplus-search.c (get_first_matching_virtual): Must call comptypes
  1362.     starting from first parameter, not its TREE_CHAIN, since one
  1363.     version of the function may have a this which is `*const' while
  1364.     the other does not.
  1365.  
  1366.     * cplus-decl.c (finish_decl): Permit static class members of
  1367.     reference type to be uninitialized in class declaration.  They
  1368.     will get initialized elsewhere, presumably.
  1369.  
  1370.     * cplus-method.c (dump_type_prefix): `const' and `volatile' were
  1371.     being put in the wrong places.  Type like `const *const ...' were
  1372.     being dumped as `const const *...'.
  1373.  
  1374.     * cplus-decl2.c (finish_file): Don't try to initialize anything
  1375.     which has ERROR_MARK_NODE in its initializer.
  1376.  
  1377. Thu Oct 12 02:41:34 1989  Michael Tiemann  (tiemann at arkesden)
  1378.  
  1379.     * cplus-init.c (resolve_member_ref): Catch case when we are in
  1380.     static member function context by reference is to (apparently)
  1381.     non-static member.
  1382.  
  1383.     * cplus-method.c (fndecl_as_string): Check PARMTYPES before
  1384.     chaining down, in case of syntax error.
  1385.  
  1386.     * cplus-init.c (do_friend): Take QUALS parameter.  Needed for
  1387.     `grokclassfn'.  Also take CTYPE instead of CNAME parameter.
  1388.     * cplus-decl.c (grokdeclarator): Caller changed.
  1389.  
  1390.     * cplus-init.c (do_friend): Set DECL_CONSTRUCTOR_P bit if we get a
  1391.     constructor.
  1392.  
  1393.     * cplus-tree.c (layout_basetypes): Don't allocate a virtual
  1394.     baseclass pointer if we can share one with a non-virtual
  1395.     baseclass.
  1396.  
  1397.     * tree.c (make_node): Build PARM_DECL nodes on the
  1398.     maybepermanent_obstack, not on the permanent_obstack.
  1399.  
  1400.     * cplus-typeck.c (build_unary_op): If addressing a reference and
  1401.     the reference is a variable, we need to check DECL_INITIAL, in
  1402.     case the variable is being initialized by a function call at top
  1403.     level.
  1404.  
  1405.     * cplus-decl.c (grokdeclarator): Be more careful when looking for
  1406.     function name when giving error that parameter list is random.
  1407.  
  1408.     * cplus-decl.c (grokdeclarator): Change handling of STATICP for
  1409.     member functions.  Eliminate variable MEMFUNC_STATICP.
  1410.  
  1411.     * cplus-decl.c (init_decl_processing): Don't disable profiling
  1412.     anymore.
  1413.  
  1414. Wed Oct 11 05:37:12 1989  Michael Tiemann  (tiemann at arkesden)
  1415.  
  1416.     * c plus-except.c [_JBLEN]: More systems have more ways to fail to
  1417.     define this value.  Implement yet another way to get it.
  1418.  
  1419.     * cplus-typeck.c (build_component_ref): Have to really check
  1420.     whether FIELD comes from a virtual baseclass.
  1421.  
  1422.     * cplus-init.c (is_aggr_typedef): Renamed
  1423.     `is_aggr_typedef_or_else' to `is_aggr_typedef', and gave it
  1424.     OR_ELSE parameter.  All callers changed.
  1425.     * cplus-parse.y (member_init): Call `is_aggr_typedef' with zero
  1426.     value for OR_ELSE.  We just want to know if the member looks like
  1427.     a virtual baseclass member or not.
  1428.  
  1429.     * cplus-method.c (build_decl_overload): Handle case where error
  1430.     has us building an overloaded name for something with a signature
  1431.     of X::f (...).  That signature is technically erroneous, but can
  1432.     arise in the face of certain syntax errors.
  1433.  
  1434.     * cplus-lex.c (yylex): Handling of extern language strings was
  1435.     broken.  If we were unlucky and got a file name string while
  1436.     reading a declaration, it could cause YYLVAL.TTYPE to contain the
  1437.     filename, rather than the type that was read in.  Fixed by
  1438.     assigning to YYLVAL.TTYPE after checking for possible language
  1439.     string identifier.
  1440.  
  1441.     * cplus-init.c (build_new): We cannot expand `new' inside of base
  1442.     or member initializers, so instead put the expansion into an
  1443.     RTL_EXPR.  CURRENT_VTABLE_DECL is ERROR_MARK_NODE in that case.
  1444.     * cplus-parse.y (.set_base_init): Set CURRENT_VTABLE_DECL to
  1445.     ERROR_MARK_NODE to indicate we are in initialization.
  1446.     * cplus-class.c (build_vfn_ref): Don't use cached vtable if
  1447.     calling function from base or member initializer.
  1448.  
  1449. Tue Oct 10 22:47:47 1989  Michael Tiemann  (tiemann at arkesden)
  1450.  
  1451.     * cplus-typeck.c (unary_complex_lvalue): Can't take pointer to
  1452.     member through virtual baseclass.
  1453.     * cplus-typeck.c (convert_for_assignment): Same change.
  1454.  
  1455.     * stmt.c (assign_parms): Don't let BLKmode parameter get
  1456.     ``rounded'' off its word boundary...`access_parm_map' does not
  1457.     know what to do if that should happen for an inline function.
  1458.  
  1459.     * cplus-decl.c (grokdeclarator): Distinguish STATICP, which has
  1460.     roughly the usual `C' meaning, from MEMFUNC_STATICP, which means
  1461.     that the declaration is a static member function.
  1462.  
  1463. Mon Oct  9 00:55:19 1989  Michael Tiemann  (tiemann at arkesden)
  1464.  
  1465.     * cplus-method.c (build_overload_name): Change naming scheme so
  1466.     that GNU calling convention (which passes objects in the stack) is
  1467.     distinct from cfront/PCC convention.
  1468.  
  1469.     * cplus-decl.c (push_overloaded_decl): Don't compare DECL_LANGUAGE
  1470.     of previously overloaded decl if it is not a FUNCTION_DECL.
  1471.  
  1472.     * cplus-decl.c (grokfndecl): Use parameter CHECK to control
  1473.     behavior of `grokclassfn' in non-constructor case (already used in
  1474.     constructor case).
  1475.  
  1476.     * cplus-class.c (finish_struct): Give warning if struct or union
  1477.     has no data members if PEDANTIC *or* EXTRA_WARNINGS.
  1478.  
  1479.     * cplus-typeck.c (convert_for_initialization): Don't forget to
  1480.     change TREE_READONLY VAR_DECLs into their constant initial value
  1481.     if they have one.
  1482.  
  1483.     * cplus-parse.y (.set_base_init): Change grammar to not go into
  1484.     error mode if a base initializer shows up for a non-member
  1485.     function.  Otherwise, compiler will push binding levels (in
  1486.     `start_function' and `store_parm_decls') which it will not pop,
  1487.     leaving us not at global_bindings_p at function end.
  1488.  
  1489.     * cplus-class.c (ideal_candidate): In the event that there is no
  1490.     ideal candidate, restore PARMS by moving value from TREE_PURPOSE
  1491.     values back into the TREE_VALUE slots.
  1492.  
  1493. Mon Oct  2 02:28:43 1989  Michael Tiemann  (tiemann at arkesden)
  1494.  
  1495.     * cplus-lex.c (cons_up_dtor_for_type): Call to `start_method'
  1496.     could yield VOID_TYPE_NODE in case of errors.  Handle that.
  1497.     * cplus-class.c (finish_struct): Caller of `cons_up_dtor_for_type'
  1498.     changed.
  1499.  
  1500.     * cplus-decl.c (pushtag): Don't call `pushdecl' on for tags which
  1501.     are TREE_NONLOCAL.
  1502.     * cplus-class.c (pushclass): Set TREE_NONLOCAL before calling
  1503.     `pushtag'.
  1504.  
  1505. Sun Oct  1 00:05:49 1989  Michael Tiemann  (tiemann at arkesden)
  1506.  
  1507.     * cplus-tree.h [DECL_VINDEX]: Change definition from being a
  1508.     FUNCTION_DECL to being a list of FUNCTION_DECLs, in the event that
  1509.     multiple baseclasses define the same virtual function.  This only
  1510.     affects code where DECL_VINDEX was assumed to be a FUNCTION_DECL,
  1511.     namely in cplus-decl.c (grokfndecl) and cplus-class.c
  1512.     (add_virtual_function).
  1513.  
  1514.     * cplus-typeck.c (convert_for_initialization): If we are
  1515.     converting to an ARRAY_TYPE, don't call `default_conversion' on an
  1516.     initializer which is also of ARRAY_TYPE.
  1517.  
  1518.     * cplus-decl.c (finish_decl): If FIELD_DECL is of type ARRAY_TYPE
  1519.     that has not yet been laid out, we must go through the code which
  1520.     calls `complete_array_type' for TYPE and `layout_decl' for DECL.
  1521.  
  1522.     * cplus-init.c (expand_aggr_init_1): See whether initializer can
  1523.     go through a type-conversion operator rather than an X(X&)
  1524.     constructor, since wel will save one constructor that way.  I.e.,
  1525.     trying to go through an X(X&) constructor may lead us to needing
  1526.     to go through a type-conversion operator, but the result of that
  1527.     conversion must still go through the original X(X&) constructor.
  1528.  
  1529.     * cplus-decl.c (finish_decl): For FUNCTION_DECLs with default
  1530.     argument, we build sub-FUNCTION_DECLs to catch calls to this
  1531.     function with fewer than the total number of arguments.  We set
  1532.     TREE_USED of the sub-FUNCTION_DECLs to keep GNU C++ from
  1533.     complaining about the function being when compiling with -Wall.
  1534.     We also need to set TREE_ASM_WRITTEN and DECL_INITIAL of the
  1535.     function to really ensure that GNU C++ does not spuriously
  1536.     complain about these sun-FUNCTION_DECLs.
  1537.     * cplus-decl.c (grokdeclarator): Set TREE_PUBLIC of after calling
  1538.     `grokfndecl' on all paths.
  1539.  
  1540.     * cplus-typeck.c (build_function_call): Set TREE_USED for
  1541.     FUNCTION_DECL if TREE_INLINE is zero.
  1542.  
  1543.     * cplus-decl2.c (grok_enum_decls): Move to cplus-decl.c since it
  1544.     now needs access to `struct binding_level'.
  1545.     * cplus-decl.c (grok_enum_decls): When looking for class-local
  1546.     enum tags, warning if we find them in a class binding level other
  1547.     than the current one.  It probably indicates a parse error in the
  1548.     file.
  1549.  
  1550.     * cplus-decl.c (lang_decode_option): Recognize new option
  1551.     -Wenum-clash, which gives warnings when enumeral types are
  1552.     used in suspect ways, such as assigning from one enumeral
  1553.     type to another.
  1554.  
  1555.     * cplus-typeck.c (message_2_types): Was previously called
  1556.     `error_2_types'.  Now takes argument PFN which is pointer to
  1557.     the function which will actually print the message.
  1558.     * cplus-typeck.c (convert_for_assignment): Give error for
  1559.     passing incompatible enums only if pedantic.  Otherwise, give
  1560.     warning.
  1561.  
  1562.     * cplus-init.c (finish_base_init): Add argument T which is the
  1563.     type for which the base initialization is being finalized.  When
  1564.     finished initializing fields which come from anonymous unions,
  1565.     call `finish_base_init' on that anonymous union, which will unmark
  1566.     interesting fields recursively.
  1567.     * cplus-decl.c (finish_function): Caller changed.
  1568.  
  1569.     * cplus-method.c (hack_identifier): Permit calls through
  1570.     REFERENCE_TYPE fields which overload `operator ()'.
  1571.  
  1572.     * cplus-cvt.c (convert): Remove warning ``assignment to virtual
  1573.     aggregate type''.
  1574.  
  1575.     * cplus-decl.c (finish_decl): Make sure to destroy function-local
  1576.     static objects if they had been initialized.  Set TREE_STATIC bit
  1577.     for elements of STATIC_AGGREGATES which are function-local
  1578.     objects.
  1579.     * cplus-decl2.c (finish_file): Rest of that implementation.
  1580.  
  1581. Sat Sep 30 20:34:52 1989  Michael Tiemann  (tiemann at arkesden)
  1582.  
  1583.     * cplus-typeck.c (actualparameterlist): Don't let objects with
  1584.     operator= or X(X&) constructors be passing into `...'.  If
  1585.     PEDANTIC, give error, otherwise, give warning.
  1586.  
  1587.     * cplus-typeck.c (convert_for_assignment): Get tougher on
  1588.     conversions to/from enumeral data types.
  1589.  
  1590.     * cplus-typeck.c (build_modify_expr): Make `operator=' an
  1591.     inheritable operator.
  1592.  
  1593.     * cplus-decl.c (push_overloaded_decl): Give error message if
  1594.     overloaded functions from different language contexts have the
  1595.     same type signature.
  1596.  
  1597.     * cplus-cvt.c (build_default_binary_type_conversion): If the types
  1598.     are not C++ types, then give error message saying that no type
  1599.     conversion operator exists.  Call function `typedecl_for_tag' to
  1600.     get name for error message.
  1601.     * cplus-decl.c (typedecl_for_tag): New function.  Return the
  1602.     TYPE_DECL (if any) assoicated with TAG.
  1603.  
  1604.     * cplus-class.c (build_functional_cast): Handle case where `A (B)'
  1605.     does not mean pass `B' to A's constructor, but rather call
  1606.     B.operator A ().
  1607.  
  1608.     * cplus-search.c (get_first_matching_virtual): If argument types
  1609.     differ only in their qualifiers, admit a match, but warn the user
  1610.     that this match was made.
  1611.  
  1612.     * cplus-lex.c (yyungetc): New function.  Give parser routines the
  1613.     ability to adjust input tokens if initial lexing was a little bit
  1614.     wrong.
  1615.  
  1616.     * cplus-method.c (build_overload_name): Distinguish reference
  1617.     types from non-reference types.
  1618.  
  1619.     * cplus-typeck.c (process_init_constructor): Give error messages
  1620.     about types of objects which cannot be initialized from an
  1621.     initializer list.
  1622.  
  1623. Wed Sep 27 00:22:16 1989  Michael Tiemann  (tiemann at arkesden)
  1624.  
  1625.     * cplus-class.c, cplus-init.c (various places): Handle cases that
  1626.     fields of struct are really local type declarations.
  1627.  
  1628.     * cplus-decl2.c (grokclassfn): Added new parameter CTYPE, in order
  1629.     to remove dependence on class name-class type equivalence.  This
  1630.     was done for exception handling.
  1631.     * cplus-decl.c, cplus-init.c, cplus-except.c: All callers changed.
  1632.     * cplus-lex.c (cons_up_dtor_for_type): Added parameter NAME, for
  1633.     same reason.
  1634.     * cplus-class.c (finish_struct): Caller changed.
  1635.  
  1636.     * cplus-decl.c (duplicate_decls): If OLDDECL's type must change,
  1637.     remove OLDDECL from STATIC_AGGREGATES if it was there.
  1638.     * cplus-decl2.c (finish_file): Handle VARS being ERROR_MARK_NODE.
  1639.  
  1640.     * cplus-class.c (build_method_call): When calling `build_new',
  1641.     pass BASETYPE, not NAME, as the thing to be new'd.
  1642.  
  1643.     * cplus-parse.y (raise_identifiers): Permit qualified names, i.e.,
  1644.     `raises List::NotFound'.
  1645.     * cplus-decl.c (grokdeclarator): Handle nested exception scopes.
  1646.     * cplus-except.c (finish_exception_decl): Ditto.
  1647.     * cplus-class.c (build_method_call): Ditto.
  1648.  
  1649.     * cplus-except.c (init_exception_processing): Build in `setjmp'
  1650.     and `longjmp'.
  1651.  
  1652.     * cplus-except.c (expand_cplus_{start,end}_exception): If the
  1653.     exception object has elements which need cleanpus, call those
  1654.     cleanups after handling the exception.
  1655.  
  1656.     * cplus-except.c (finish_exception_decl): Set TYPE_HAS_CONSTRUCTOR
  1657.     bit, since call to `grokdeclarator' is subverted.
  1658.  
  1659.     * cplus-except.c (init_exception_processing): Size of `handler'
  1660.     field in built-in `ExceptionHandler' type was too big by one.
  1661.  
  1662.     * cplus-init.c (build_delete): Don't call non-virtual destructor
  1663.     with first argument of zero.
  1664.  
  1665.     * cplus-parse.y (except_stmts): Handle default exception as last
  1666.     exception (so that fall-through does the right thing).  Also, give
  1667.     error message if multiple `default' clauses appear within an
  1668.     `except_stmt'.
  1669.  
  1670.     * cplus-decl.c (finish_decl): If a variable needs a cleanup, pass
  1671.     the cleanup to `expand_decl', whether or not that variable has RTL
  1672.     or not.
  1673.     * cplus-except.c (expand_start_try): Call `finish_decl' instead of
  1674.     `expand_aggr_init' to initialize the exception handler for the
  1675.     try.  Otherwise, the exception handler's destructor will not be
  1676.     called at the end of the try.
  1677.  
  1678.     * cplus-decl.c (store_parm_decls): Don't call `__main' from `main'
  1679.     until after the parameters have been dealt with.
  1680.  
  1681. Tue Sep 26 09:41:29 1989  Michael Tiemann  (tiemann at teacake)
  1682.  
  1683.     * cplus-parse.y (stmt): Deal with case of TRY statement without
  1684.     corresponding EXCEPT clause.
  1685.  
  1686.     * cplus-decl.c (duplicate_decls): Don't call `compexcepttypes'
  1687.     until after calling `commontype', lest default parameters cause
  1688.     identical exception lists to look different.
  1689.  
  1690.     * cplus-except.c (end_exception_decl): New function clears
  1691.     exception declaration state.
  1692.     * cplus-parse.y (datadef): Call end_exception_decl when we are at
  1693.     the end of a declaration which could be an exception declaration.
  1694.  
  1695.     * cplus-class.c (modify_vtable_entry): Reenable stubbed out code
  1696.     which is used when baseclass is virtual.
  1697.     * cplus-class.c (finish_struct): When base class is virtual, check
  1698.     CLASSTYPE_VBASECLASSES using `value_member' instead of
  1699.     CLASSTYPE_ASSOC using `assoc_value'.
  1700.  
  1701.     * dbxout.c (dbxout_tags): Ensure that fully output types have
  1702.     their typedefs output as well.  Needed to support -fminimal-debug.
  1703.  
  1704. Sun Sep 24 11:22:41 1989  Michael Tiemann  (tiemann at arkesden)
  1705.  
  1706.     * cplus-method.c (report_type_mismatch): Don't tweak I if the
  1707.     function was FUNCTION_TYPE.  Let TTF and TTA be advanced according
  1708.     to CP->U.BAD_ARG only.
  1709.  
  1710.     * expr.c (expand_expr): PROTECT argument missing in call to
  1711.     `expand_delete'.
  1712.     * cplus-init.c (build_delete): Call `convert_force' instead of
  1713.     `convert' if PROTECT is 0.
  1714.  
  1715.     * cplus-typeck2.c (digest_init): When initializing a RECORD_TYPE
  1716.     object, call `convert_for_initialization' as a last resort.
  1717.  
  1718.     * cplus-tree.c (build_exception_variant): Used TREE_CHAIN for look
  1719.     when should have used TYPE_NEXT_VARIANT.
  1720.  
  1721.     * cplus-decl.c ({start,finish}_decl): Handle decls which are
  1722.     CLASSTYPE_DECLARED_EXCEPTION.  For `start_decl', nothing needs to
  1723.     be done.  For `finish_decl', call `finish_exception_decl'.
  1724.  
  1725.     * cplus-except.c (finish_exception): When user defines an
  1726.     exception, make the compiler generate that exception's constructor
  1727.     automatically.
  1728.  
  1729.     * cplus-typeck.c (build_binary_op_nodefault): Associate
  1730.     (((a && b) && c) && d) to ((a && b) && (c && d)) to get better
  1731.     merging of component references when possible.
  1732.     * cplus-typeck2.c (merge_component_comparisons): Permit
  1733.     non-contiguous bitfield tests if bitfields are comparisons against
  1734.     integers.
  1735.  
  1736.     * cplus-tree.c (layout_basetypes): Give each basetype the
  1737.     alignment it wants.
  1738.  
  1739.     * cplus-lex.c (yylex): Recognize >?= and <?= operators (like +=
  1740.     for min and max operators).
  1741.  
  1742.     * cplus-decl.c (grokdeclarator): Set TREE_PUBLIC bit of
  1743.     FUNCTION_DECLs in FIELD_CONTEXT if they are !INLINEP.
  1744.  
  1745.     * cplus-decl.c (finish_function): Don't pay attention to
  1746.     `current_function_returns_null' when compiling constructors.
  1747.  
  1748. Sat Sep 23 00:03:52 1989  Michael Tiemann  (tiemann at arkesden)
  1749.  
  1750.     * stmt.c (assign_parms): Take care of case where parm arrives on
  1751.     the stack, but `__builtin_saveregs' might be called.  In that
  1752.     case, get bits from stack into registers, so that
  1753.     `__builtin_saveregs' will not overwrite with garbage.
  1754.     * expr.c (expand_builtin): Modify expansion of BUILT_IN_SAVEREGS
  1755.     to protect stack args that need protecting.
  1756.  
  1757.     * cplus-decl.c (grokdeclarator): Never build a METHOD_TYPE if
  1758.     CTYPE is NULL_TREE.  Was doing that when declaration of illegal
  1759.     construct ``virtual friend'' was parsed.
  1760.  
  1761.     * cplus-parse.y (do_array:): Don't try to call `build_array_ref'
  1762.     if $3 is ERROR_MARK_NODE (cuts down on spurious error messages).
  1763.  
  1764.     * cplus-decl.c (grokfndecl): Move setting of DECL_VIRTUAL_P bit to
  1765.     after we know whether the function is virtual.  Remove setting
  1766.     CLASSTYPE_VSIZE.  This will be set more accurately by
  1767.     `finish_struct'.
  1768.  
  1769. Fri Sep 22 15:36:32 1989  Michael Tiemann  (tiemann at arkesden)
  1770.  
  1771.     * cplus-cvt.c (convert_to_pointer): PATH was reversed for
  1772.     computing nested virtual base accesses.
  1773.  
  1774.     * cplus-except.c (finish_exception): Call POPCLASS at end.
  1775.  
  1776.     * cplus-class.c (build_field_call): New function containing code
  1777.     broken out of `build_method_call'.  Extended to grok calls through
  1778.     fields of exception objects which overload `operator()()', or are
  1779.     otherwise callable.
  1780.     * cplus-class.c (build_method_call): Now about 100 lines shorter.
  1781.  
  1782.     * cplus-decl.c (grokdeclarator): Take new argument RAISES
  1783.     specifying the exceptions that a function will raise.
  1784.     * cplus-decl.c (grokfield): Implement RAISES semantics by passing
  1785.     them to `grokdeclarator'.
  1786.  
  1787.     * cplus-decl.c (grok{fn,var}decl): Two new functions containing
  1788.     code broken out of `grokdeclarator'.
  1789.     * cplus-decl.c (grokdeclarator): Now about 250 lines shorter.
  1790.  
  1791. Thu Sep 21 16:51:11 1989  Michael Tiemann  (tiemann at arkesden)
  1792.  
  1793.     * cplus-search.c (get_vbase_types): Sort was totally broken.
  1794.     Completely rewritten.
  1795.  
  1796. Wed Sep 20 00:47:36 1989  Michael Tiemann  (tiemann at teacake)
  1797.  
  1798.     * cplus-decl2.c (finish_file): Change !defined(SDB_DEBUGGING_INFO)
  1799.     to defined(DBX_DEBUGGING_INFO).
  1800.  
  1801.     * cplus-class.c (finish_struct): Argument to `alloca' was off by
  1802.     9.
  1803.  
  1804.     * cplus-init.c (build_new): If type requires alignment >
  1805.     BITS_PER_WORD (which is what ``__builtin_new'' is supposed to
  1806.     give), then get more space and round manually.
  1807.  
  1808. Tue Sep 19 03:08:58 1989  Michael Tiemann  (tiemann at teacake)
  1809.  
  1810.     * cplus-decl.c (finish_decl): Don't call `comptypes' if INIT is
  1811.     error_mark_node.
  1812.  
  1813.     * cplus-cvt.c (convert_to_reference): Set TREE_VOLATILE bit for
  1814.     assignment from one reference to another (for
  1815.     build_compound_expr).
  1816.  
  1817.     * cplus-decl2.c (finish_file): If we are compiling on Suns, bind
  1818.     local label ``_fini'' to static file cleanup function and
  1819.     ``_init'' to static file initialization function. STUBBED OUT FOR
  1820.     NOW.
  1821.  
  1822.     * cplus-parse.y: Put `type_quals' in 3rd operand position of a
  1823.     CALL_EXPR.  Interface to `start_function', `start_method'
  1824.     and `grokfield' changed.
  1825.     * cplus-decl.c (grokdeclarator): Get QUALS from
  1826.     TREE_OPERAND (CALL_EXPR, 2). [n.b.: First operand is
  1827.     TREE_OPERAND (CALL_EXPR, 0)].
  1828.  
  1829.     * cplus-tree.h (TYPE_RAISES_EXCEPTIONS): For FUNCTION_TYPE and
  1830.     METHOD_TYPE, a list of the exceptions that may be raised.
  1831.     * cplus-decl.c (duplicate_decls): Remove assumption that
  1832.     TYPE_LANG_SPECIFIC implies that type IS_AGGR_TYPE.
  1833.  
  1834. Mon Sep 18 14:08:02 1989  Michael Tiemann  (tiemann at teacake)
  1835.  
  1836.     * cplus-class.c (add_virtual_function): If WRITE_VIRTUALS == 2,
  1837.     only set the TREE_ADDRESSABLE bit on a virtual function if the
  1838.     virtual function table is actually being output in this file.
  1839.     * cplus-decl.c (grokdeclarator): If WRITE_VIRTUALS == 2, make
  1840.     inline virtual functions TREE_PUBLIC if we are writing out this
  1841.     virtual function's virtual function table.
  1842.     * cplus-lex.c (reinit_parse_for_method): Don't clobber the above
  1843.     setting of TREE_PUBLIC for virtual functions.
  1844.  
  1845.     * cplus-lex.c: Process inline functions in declaration order.
  1846.  
  1847. Sun Sep 17 01:46:14 1989  Michael Tiemann  (tiemann at teacake)
  1848.  
  1849.     * cplus-declc. (grokdeclarator,start_method,start_function): Merge
  1850.     ``extern inline'' change.
  1851.  
  1852.     * cplus-typeck2.c (merge_component_comparisons): New function.
  1853.     Optimizes operations on contiguous component references provided
  1854.     that operations and alignments permit.
  1855.     * cplus-typeck2.c (make_merged_ref): Subroutine of above function
  1856.     to actually get the combined references.
  1857.  
  1858.     * cplus-typeck2.c: New file.  Contains error-reporting
  1859.     functionality from cplus-typeck.c, and other functionality which
  1860.     could be easily moved out.
  1861.  
  1862.     * cplus-typeck.c (unary_complex_lvalue): Must test against
  1863.     {FUNCTION,METHOD,OFFSET}_TYPE before testing whether ARG is a
  1864.     MEMBER_REF.  If the former holds, then we have an expression like
  1865.     X::Y.  In the latter case, we have an expression like (X->*Y).
  1866.  
  1867. Sat Sep 16 11:31:21 1989  Michael Tiemann  (tiemann at teacake)
  1868.  
  1869.     * toplev.c (main): Recognize `+' options again.
  1870.  
  1871.     * cplus-decl.c (lang_decode_option): Implement `+e2' option, which
  1872.     writes out only virtual function tables specified in #pragma
  1873.     vtable.
  1874.     * cplus-decl2.c (finish_file): Implement semantics of `+e2'
  1875.     option.
  1876.     * cplus-lex.c (yylex): Recognize `#pragma vtable'.
  1877.  
  1878.     * cplus-decl2.c (finish_file): Charge time used against
  1879.     VARCONST_TIME, not PARSE_TIME.
  1880.  
  1881. Thu Sep 14 18:04:10 1989  Michael Tiemann  (tiemann at teacake)
  1882.  
  1883.     * cplus-init.c (build_new): If FLAG_THIS_IS_VARIABLE is non-zero,
  1884.     then generate call to constructor with zero as first argument.
  1885.     Otherwise, use `expand_aggr_init' to initialize the storage
  1886.     returned from whatever storage allocator was called.
  1887.     Initialization of virtual baseclasses simplified.  Memory
  1888.     management made more complex (though more general) because we may
  1889.     have `new' expressions not being evaluated until `finish_file' is
  1890.     called.
  1891.     * cplus-decl2.c (finish_file): Handle a `new' expreesion at top
  1892.     level.
  1893.  
  1894.     * cplus-decl.c (finish_function): Change call from `build_x_new'
  1895.     to `build_new'.
  1896.     * cplus-init.c (build_x_new): Deleted.
  1897.  
  1898.     * cplus-init.c (build_new): Give error if arguments are given to a
  1899.     `new' expression for which no constructor is defined.
  1900.  
  1901.     * cplus-decl.c (decode_lang_option): Use option table from
  1902.     toplev.c to decode -f options.
  1903.  
  1904.     * cplus-method.c (flush_repeats,build_overload_name): Change
  1905.     naming convention to avoid ambiguous names if type index or number
  1906.     of repeats is more than nine.
  1907.  
  1908.     * cplus-except.c (init_exception_processing): Use <setjmp.h> to
  1909.     find length of setjmp buffer.
  1910.  
  1911. Wed Sep 13 05:32:50 1989  Michael Tiemann  (tiemann at teacake)
  1912.  
  1913.     * cplus-decl.c (start_method): Set TREE_INLINE bit if
  1914.     FLAG_DEFAULT_INLINE is nonzero.
  1915.     * cplus-decl.c (lang_decode_option): Recognize -fdefault-inline.
  1916.  
  1917.     * cplus-init.c (do_friend): Call `pushdecl_top_level' instead of
  1918.     `pushdecl'.
  1919.  
  1920.     * cplus-decl.c (start_method): Only need to copy node if it is not
  1921.     a friend.
  1922.     * cplus-decl.c (finish_method): In that case, return
  1923.     VOID_TYPE_NODE if the method was really a friend, but save it to
  1924.     CLASSTYPE_INLINE_FRIENDS so it can be processed properly later.
  1925.     It would be nice to have an obstack for this list so it could be
  1926.     freed at the end of this class's processing.
  1927.  
  1928. Tue Sep 12 05:22:03 1989  Michael Tiemann  (tiemann at teacake)
  1929.  
  1930.     * cplus-decl.c (start_function): Make C++ FUNCTION_DECL inherit
  1931.     DECL_ASSEMBLER_NAME from old C FUNCTION_DECL if their types are
  1932.     identical.  This makes C<->C++ calls *much* easier to deal with.
  1933.  
  1934.     * cplus-decl.c (xref_tag): Don't set CLASSTYPE_DECLARED_CLASS bit
  1935.     if REF is CURRENT_CLASS_TYPE (??? or on the CURRENT_CLASS_STACK).
  1936.  
  1937.     * cplus-search.c (lookup_field_1): Give the user the virtual
  1938.     function table field if the name is `_vptr'.
  1939.     * cplus-decl2.c (grokfield): Don't let user declare anything with
  1940.     that name.
  1941.  
  1942.     * cplus-cvt.c (build_type_conversion): If we are trying to convert
  1943.     to type `void*' and no conversion to ptr_type_node exists, but a
  1944.     some other pointer conversion for TYPE exists, then convert to
  1945.     that pointer type, unless there is more than one such conversion,
  1946.     in which case return ERROR_MARK_NODE.  The caller will emit an
  1947.     error message in that case.  All callers changed.
  1948.     * cplus-cvt.c (convert_to_{integer,real,pointer}): Removed `saving
  1949.     throw' case which would try converting aggregate to a default type
  1950.     if requested conversion did not succeed.  `build_type_conversion'
  1951.     knows how to perform such `saving throws'.
  1952.     * cplus-tree.h (lang_type): New field `ptr_type_conversion'.
  1953.     * cplus-decl.c (grokdeclarator): Record whether a type has a
  1954.     type conversion operator here.
  1955.     * cplus-class.c (finish_struct): Set up `ptr_type_conversion'.
  1956.     Also, don't need to trudge through all methods to find out there
  1957.     are no type conversion methods.
  1958.  
  1959. Mon Sep 11 10:45:01 1989  Michael Tiemann  (tiemann at teacake)
  1960.  
  1961.     * cplus-class.c (finish_struct): If we must cons up a destructor
  1962.     for a type, and METHOD_VEC was 0, set TREE_VEC_LENGTH (METHOD_VEC)
  1963.     to 1 after allocating METHOD_VEC.
  1964.  
  1965.     * cplus-class.c (finish_struct): Finish processing METHOD_VEC
  1966.     before making other calls out which may call `hash_tree_chain'.
  1967.  
  1968.     * cplus-class.c (finish_struct): Add BASE_LAYOUT_DECL to eliminate
  1969.     need for callback in stor-layout.c.
  1970.  
  1971.     * cplus-typeck.c (build_binary_op): Special case situation where
  1972.     we compare ARG1 with INTEGER_ZERO_NODE and ARG1 is of aggregate
  1973.     type.  This is what comes from `truthvalue_conversion'.
  1974.  
  1975.     * cplus-cvt.c (build_type_conversion): New argument CODE says for
  1976.     what purpose the conversion is taking place.  Important ones are
  1977.     truthvalue operations, which permit us to convert to different
  1978.     types then the ones we asked for.  All callers changed.
  1979.     * cplus-cvt.c (build_default_{binary,unary}_type_conversion): Same
  1980.     change.  All callers changed.
  1981.  
  1982.     * cplus-class.c (finish_{base_}struct): Set
  1983.     TYPE_NEEDS_CONSTRUCTING bits when basetype or member type needs
  1984.     constructing.
  1985.  
  1986.     * cplus-search.c (compute_visibility): Use TYPE_MAIN_VARIANT to
  1987.     see if field is public member of private baseclass.
  1988.  
  1989.     * cplus-init.c (expand_aggr_init_1): When bad arguments were
  1990.     passed to constructors for base initialization, only half the
  1991.     error message would appear.
  1992.  
  1993.     * Makefile: Remove dependencies on unexec.c and unex-addr.c.
  1994.  
  1995.     * cplus-decl.c (push_overloaded_decl): Can't use `value_member' to
  1996.     find previously declared function.  Use DECL_NAME of function
  1997.     instead, since that must be unique (as a type signature/name
  1998.     combination).
  1999.  
  2000.     * cplus-lex.c (yylex): typo in assert macro.
  2001.     * cplus-cvt.c (convert_to_nonzero_pointer): Ditto
  2002.  
  2003.     * All GNU C++ files: implement initialized constant fields.  Make
  2004.     them non-static, non-addressable VAR_DECLs.
  2005.  
  2006. Sun Sep 10 09:19:22 1989  Michael Tiemann  (tiemann at teacake)
  2007.  
  2008.     * cplus-method.c (build_opfncall): Remove METHOD_REF case.
  2009.     * tree.def: Remove definition of METHOD_REF.
  2010.  
  2011.     * cplus-decl.c (finish_decl): If a static member needs
  2012.     constructing, but it does not have an initializer, make it
  2013.     TREE_EXTERNAL.
  2014.     * cplus-decl2.c (grokfield): Set DECL_IN_AGGR_P before calling
  2015.     `finish_decl' for VAR_DECLs.
  2016.  
  2017.     * cplus-parse.y (forhead.2): New rule to keep GNU C++ gives better
  2018.     error handling when multiple variables are declared in the first
  2019.     part of a `for' stmt.
  2020.  
  2021.     * cplus-lex.c (finish_method): Handle case when `start_method'
  2022.     returns VOID_TYPE_NODE (two definitions of the same method in the
  2023.     same class.
  2024.  
  2025.     * cplus-decl.c (grok_op_properties): Make static operators (other
  2026.     than new and delete) trigger error messages.  If operator new or
  2027.     delete has no arguments (due to syntax errors), rebuild their
  2028.     types.  They have the right names, because `build_operator_fnname'
  2029.     knows how to do that.
  2030.  
  2031.     * stor-layout.c (make_{un}signed_type): Cache size nodes for
  2032.     pointers, functions, and methods.
  2033.     * stor-layout.c (layout_type): Use cached types.
  2034.  
  2035.     * cplus-decl{2}.c: Use `hash_tree_chain' instead of `tree_cons'
  2036.     where possible.
  2037.  
  2038.     * cplus-decl.c (expand_static_init): If variable has already been
  2039.     initialized, give complaint, but don't store the initializer.
  2040.     That way we don't have to preserve it on the temporary obstack.
  2041.  
  2042.     * cplus-parse.y (identifier_or_opname): Accept new C++ destructor
  2043.     syntax, which is effectively "scoped_identifier '~' identifier".
  2044.     * cplus-class.c (build_scoped_method_call): Accept calls using new
  2045.     C++ destructor syntax here.
  2046.     * cplus-class.c (build_method_call): Reject calls through here
  2047.     which don't use a leading `scoped_identifier'.
  2048.  
  2049.     * cplus-init.c (build_new): Don't permit arrays of `void'.  Better
  2050.     error message emitted for newing `void'.
  2051.  
  2052.     * cplus-typeck.c (build_conditional_expr): Don't call
  2053.     `default_conversion' on the arms of the conditional if both are of
  2054.     the same enumeral type.  Otherwise, if EXTRA_WARNINGS, give
  2055.     warning if enumeral type appears in either (or both) arm(s) of the
  2056.     conditional.
  2057.  
  2058.     * cplus-cvt.c (build_type_conversion): Don't convert from `int' to
  2059.     `void*'.  Don't convert a `void*' to an `int'.
  2060.  
  2061.     * cplus-decl.c (xref_tag): If we get an old reference to a C
  2062.     struct name, and we are in C++ langauge context, give it a
  2063.     TYPE_DECL.
  2064.  
  2065.     * cplus-class.c (build_method_call): Don't call
  2066.     `default_conversion' on MEMBER_REFs because they might be enums.
  2067.     Instead, call `resolve_member_ref', and then if the type is
  2068.     something we would rather convert before calling
  2069.     compute_conversion_costs, convert that.
  2070.  
  2071.     * cplus-init.c: Set TREE_VOLATILE bit after all
  2072.     ``build (CALL_EXPR, ...)'' calls.
  2073.  
  2074.     * cplus-init.c (expand_vec_init): If at global binding level,
  2075.     return a TREE_VEC which contains the initialization parameters for
  2076.     the vector.  `expand_vec_init' is no longer static.
  2077.     * cplus-decl.c (finish_decl): Handle INIT being result of
  2078.     `expand_vec_init' at top-level.
  2079.     * cplus-decl2.c (finish_file): Ditto.
  2080.  
  2081. Sat Sep  9 12:44:48 1989  Michael Tiemann  (tiemann at teacake)
  2082.  
  2083.     * cplus-class.c (finish_struct): Move error message about static
  2084.     members in unions from stor-layout.c to here.
  2085.  
  2086.     * varasm.c, stor-layout.c: Merged with GCC.
  2087.     * cplus-class.c (finish_struct): Use special FIELD_DECL in
  2088.     TYPE_FIELDS of T before calling `layout_type' to have effect of
  2089.     passing basetype layout information to `layout_record'.
  2090.  
  2091.     * cplus-typeck.c (build_c_cast): Typo in call to
  2092.     cleanup_after_call.
  2093.  
  2094. Fri Sep  8 11:16:01 1989  Michael Tiemann  (tiemann at teacake)
  2095.  
  2096.     * All GNU C++ files: replaced calls to `abort' with assertion
  2097.     macros where appropriate.  Also removed some unneccessary tests
  2098.     against ERROR_MARK_NODE in various function calls.
  2099.  
  2100.     * cplus-lex.c (check_newline): Changed to take NEXTCHAR into
  2101.     account.
  2102.  
  2103. Thu Sep  7 06:15:56 1989  Michael Tiemann  (tiemann at teacake)
  2104.  
  2105.     * cplus-decl.c (store_parm_decls): Change where
  2106.     DECL_REFERENCE_SLOT is initialized.  Eliminate a second loop
  2107.     through the parms.
  2108.  
  2109.     * cplus-method.c (hack_identifier): Don't need to test against
  2110.     FUNCTION_DECL before testing if the TREE_TYPE is REFERENCE_TYPE.
  2111.  
  2112.     * cplus-lex.c (yylex): If reading `0' or `1', return
  2113.     INTEGER_ZERO_NODE or INTEGER_ONE_NODE respectively.
  2114.     * cplus-decl.c (build_enumerator): If we got one of these two
  2115.     as a value, make a copy.
  2116.  
  2117.     * tree.c,cplus-lex.c,cplus-class.c,cplus-search.c
  2118.     [GATHER_STATISTICS]: Now only gather statistics if this macro is
  2119.     defined.
  2120.  
  2121.     * tree.c (make_node,build_int_2,tree_cons,build_tree_list): Merge
  2122.     Bryan Boreham's ``deluxe'' memory profiling code.
  2123.  
  2124.     * cplus-decl.c (finish_decl): Only complain about uninitialized
  2125.     refs and consts if there is no constructor for the type.  If there
  2126.     is a constructor, then that constructor should say whether it did
  2127.     not initializer certain fields or not.
  2128.  
  2129.     * cplus-init.c (expand_aggr_init): When initializing, nothing is
  2130.     `const'.
  2131.  
  2132.     * cplus-decl.c (store_parm_decls): No need to call
  2133.     expand_decl_init on a PARM_DECL.  In fact, now it is wrong.
  2134.  
  2135.     * tree.h: rearranged tree_decl layout and defined
  2136.     tree_function_decl type for FUNCTION_DECLs.  Now space
  2137.     requirements for FUNCTION_DECLs do not impose on other kinds of
  2138.     _DECL nodes.  Also, PARM_DECL nodes use less than a full decl
  2139.     node's worth of space.
  2140.     * toplev.c (rest_of_decl_compilation): Don't permit ASMSPEC to
  2141.     appliy to PARM_DECL nodes.
  2142.     * varasm.c (make_decl_rtl): Abort if called for a PARM_DECL node.
  2143.     * print-tree.c (dump): PARM_DECL nodes are not full.
  2144.     FUNCTION_DECL nodes have more fields then regular _DECLs now.
  2145.     * tree.c (make_node): Use TREE_CODE_LENGTH when allocating _DECL
  2146.     nodes.  Also, don't set DECL_SOURCE_* for PARM_DECL nodes.
  2147.     Instead, set their DECL_CONTEXT to CURRENT_FUNCTION_DECL.
  2148.     * tree.c (build_decl): Don't set DECL_ASSEMBLER_NAME for PARM_DECL
  2149.     nodes.
  2150.     * cplus-decl.c (start_decl): Don't not push DECL if DECL is a
  2151.     PARM_DECL.
  2152.  
  2153.     * cplus-lex.c (yylex): Remove tests about whether we *really* saw
  2154.     a keyword or not.  Instead, use `init_lex' to do most of the work
  2155.     for us (since lang_c's reserved word set is a subset of
  2156.     lang_cplusplus).
  2157.  
  2158.     * cplus-decl.c,cplus-decl2.c,cplus-typeck.c,cplus-class.c,
  2159.     cplus-lex.c, cplus-method.c: change tests of the form
  2160.     (TREE_VALUE (t) == void_type_node) to (t == void_list_node).
  2161.  
  2162.     * cplus-decl2.c (grokopexpr): Added argument CTYPE to help
  2163.     distinguish whether operators NEW and DELETE belong to a class, or
  2164.     are the global operators NEW and DELETE.
  2165.     * cplus-decl.c (grokdeclarator): Caller changed.
  2166.     * cplus-method.c (hack_operator): Caller changed.
  2167.  
  2168. Wed Sep  6 10:29:45 1989  Michael Tiemann  (tiemann at teacake)
  2169.  
  2170.     * dbxout.c (dbxout_type): Handle static member functions.
  2171.  
  2172.     * cplus-typeck.c (c_expand_return): Change test from
  2173.     TYPE_NEEDS_CONSTRUCTING to TYPE_NEEDS_CONSTRUCTOR to see whether
  2174.     `expand_aggr_init' must be called.
  2175.  
  2176.     * cplus-decl2.c (grokfield): Use `digest_init' to digest
  2177.     CONSTRUCTOR initializers of fields.
  2178.  
  2179.     * cplus-decl.c (grokdeclarator): Permit ARRAY_TYPE field decls to
  2180.     get their types from their initializer (if they were incomplete).
  2181.  
  2182.     * cplus-lex.c (build_operator_fnname): If there is more than one
  2183.     parameter to NEW_EXPR, then it is `__user_new'.
  2184.  
  2185.     * cplus-decl.c (store_parm_decls): Remove code to deal with case
  2186.     that function was declared without prototypes.  It is never
  2187.     executed.
  2188.  
  2189.     * cplus-typeck.c (unary_complex_lvalue): Handle (x->*y) as an
  2190.     lvalue.
  2191.  
  2192.     * cplus-decl.c (start_decl): Put in check that temporary obstack
  2193.     starts out empty when we start parsing an initializer.
  2194.     * cplus-decl.c (expand_static_init): If the initializer was read
  2195.     into the temporary obstack, preserve all space that it used.  I
  2196.     don't think it is safe to always read the initializer into the
  2197.     permanent_obstack and then free the space if it doesn't look
  2198.     interesting, because types may be created dynamically as a result
  2199.     of reading it in (such as array types), and we don't want them to
  2200.     get freed.
  2201.  
  2202.     * cplus-decl.c (finish_decl): Don't set DECL_ASSEMBLER_NAME of the
  2203.     decl to ASMSPEC if ASMSPEC is 0.
  2204.  
  2205.     * cplus-decl.c (finish_function): Set named_label_uses to
  2206.     NULL_TREE at end of function.
  2207.  
  2208. Tue Sep  5 05:24:18 1989  Michael Tiemann  (tiemann at teacake)
  2209.  
  2210.     * cplus-except.c: New file.  Implements exception handling scheme
  2211.     designed by Michael Powell.
  2212.  
  2213.     * cplus-method.c (build_overload_name): Overload constructor names
  2214.     as '__' instead of whatever their original name was.
  2215.     * cplus-method.c (build_decl_overload): Distinguish constructors
  2216.     from other kinds of member functions.
  2217.     * cplus-decl2.c (grokclassfn): Call changed to
  2218.     `build_decl_overload' to take this into account.
  2219.  
  2220.     * cplus-decl.c (duplicate_decls): Don't crash if NEWDECL is a
  2221.     VAR_DECL, and there is an old VAR_DECL on the chain.  Happens for
  2222.     strange parse errors.
  2223.  
  2224. Mon Sep  4 01:36:07 1989  Michael Tiemann  (tiemann at teacake)
  2225.  
  2226.     * cplus-decl2.c: New file.  Contains functions which used to be
  2227.     defined in cplus-decl.c, but could be easily broken out. Also
  2228.     moved some functions out of cplus-tree.c which did not really
  2229.     belong there, but were put there to make compilation less painful.
  2230.  
  2231.     * cplus-class.c (build_method_call): Use ERR_NAME in more places
  2232.     when printing error messages.
  2233.  
  2234.     * cplus-decl.c (grokdeclarator): Special case NEW_EXPR and
  2235.     DELETE_EXPR when grokking an OP_IDENTIFIER.  Make these guys
  2236.     static member functions.  Callers in cplus-init.c changed.
  2237.     * cplus-tree.c (coerce_new_type,coerce_delete_type): Force the
  2238.     type of `operator new' and `operator delete' to wind up with the
  2239.     right types.
  2240.     * cplus-lex.c (build_operator_fnname): Handle `operator new' and
  2241.     `operator delete' correctly, warning when the wrong number of
  2242.     parameters show up.
  2243.  
  2244.     * expr.c (expand_expr): Add NEW_EXPR to the list of tree codes
  2245.     for which INIT_EXPR and MODIFY_EXPR don't need to deal with
  2246.     noncopied_parts.
  2247.  
  2248.     * cplus-class.c (finish_struct): Initialize TREE_PURPOSE of
  2249.     TYPE_NONCOPIED_PARTS to the virtual function table for the type.
  2250.  
  2251.     * cplus-cvt.c (build_type_conversion_1): Compiler was getting into
  2252.     infinite recursion when asked to convert something from its own
  2253.     type to its own type.
  2254.  
  2255.     * cplus-parse.y: Added RERAISE statement.
  2256.     * cplus-lex.c: Added __reraise keyword.
  2257.  
  2258.     * cplus-cvt.c (build_type_conversion): Build type conversions to
  2259.     type variants (i.e., given `operator char * ()', convert to a
  2260.     `const char *').
  2261.  
  2262.     * dbxout.c (dbxout_tags): Callback to language-specific files to
  2263.     see whether a type should actually be output.
  2264.     * dbxout.c (dbxout_symbol): Same change.
  2265.     * cplus-tree.c (lang_output_debug_info): New function.
  2266.     * cplus-decl.c (finish_function): Memoize information for
  2267.     lang_output_debug_info.
  2268.  
  2269.     * Merged latest changes from Bryan Boreham for incremental
  2270.     compilation via dumping.
  2271.  
  2272.     * cplus-parse.y: Recognize `::new' and `::delete'.
  2273.     * cplus-init.c (build_new): Handle `::new' by new interpretation
  2274.     of USER_PARMS.  Only callers in cplus-parse.y needed changing.
  2275.     * cplus-init.c (build_{x_}delete): Handle `::delete' by accepting
  2276.     new argument USE_GLOBAL_DELETE.  All callers changed.
  2277.  
  2278. Sun Sep  3 12:42:38 1989  Michael Tiemann  (tiemann at teacake)
  2279.  
  2280.     * expr.c (expand_cleanups_to): New function.
  2281.     * cplus-init.c (expand_cplus_expr_stmt): Call it after all is said
  2282.     and done.
  2283.  
  2284.     * expr.c (expand_expr): When encountering a NEW_EXPR, it is
  2285.     possible that the NEW_EXPR did not know (when it was built) what
  2286.     its cleanup needed to be.  If its cleanup is 0, try building one
  2287.     if a new temporary was built for it.
  2288.  
  2289.     * cplus-decl.c (duplicate_decls): Warn if function type qualifiers
  2290.     don't match only if PEDANTIC (following change made by rms).
  2291.  
  2292.     * cplus-typeck.c (build_function_call): If pedantic, don't permit
  2293.     `main' to be called.
  2294.  
  2295.     * cplus-typeck.c (convert_for_assignment): Don't let ints
  2296.     convert to enums.
  2297.  
  2298.     * cplus-decl.c (start_function): Ensure that `main' is
  2299.     always declared to return an integer type.
  2300.     * cplus-decl.c (finish_function): Make it so that `main' always
  2301.     returns 0 by default.
  2302.  
  2303.     * cplus-decl.c (grokdeclarator): Make it now an error to specify
  2304.     return types for constructors and destructors.
  2305.  
  2306.     * cplus-typeck.c (comp_target_{parms,types}): Loosen up to permit
  2307.     contravariance violations, though not without warning.
  2308.  
  2309.     * cplus-method.c (build_overload_name): Change from old
  2310.     overloading scheme to one more or less compatible with type-safe
  2311.     linkage scheme proposed in Stroustrup's 1988 USENIX paper.
  2312.  
  2313. Sat Sep  2 09:16:01 1989  Michael Tiemann  (tiemann at teacake)
  2314.  
  2315.     * cplus-typeck.c (convert_for_initialization): Permit
  2316.     initialization of reference from incomplete type: that type will
  2317.     be converted to REFERENCE_TYPE, and that is just as good as a
  2318.     pointer to incomplete type.
  2319.  
  2320.     * cplus-decl.c (finish_decl): Handle case of static reference
  2321.     initialized from non-constant initializer.  Break out code to
  2322.     initialize static variables as function `expand_static_init'.
  2323.  
  2324.     * cplus-decl.c (finish_decl): Don't call constructors on external
  2325.     variables.
  2326.  
  2327.     * integrate.c (copy_for_inline): Canonicalize PLUS expressions so
  2328.     that CONST_INTs appear on the right, and `FRAME_POINTER_RTX'
  2329.     and/or `ARG_POINTER_RTX' on the left.
  2330.     * integrate.c (copy_rtx_and_substitute): Take advantage of this
  2331.     fact and test fewer things while integrating.
  2332.  
  2333.     * cplus-typeck.c (c_expand_return): Try to get away with not
  2334.     issuing a call to `use_variable' for the DECL_RESULT of the
  2335.     function.  If that fails, calling it only if
  2336.     `any_pending_cleanups' returns nonzero.
  2337.  
  2338.     * cplus-init.c (expand_recursive_init_1): Handle multi-demensional
  2339.     arrays which need constructing.
  2340.     * cplus-init.c (expand_vec_init): Handle multi-demensional arrays.
  2341.     Say sorry if we try to use an explicit initializer in that case,
  2342.     however.
  2343.  
  2344.     * cplus-parse.y: Permit the integer zero to be deleted (though who
  2345.     would want to?).
  2346.  
  2347.     * varasm.c (make_function_rtl): Replace call to lang_rtl_name with
  2348.     use of DECL_ASSEMBLER_NAME.
  2349.     * cplus-decl.c (lang_rtl_name): Removed.
  2350.  
  2351.     * cplus-decl.c (grokclassfn): Set DECL_ASSEMBLER_NAME after
  2352.     changing DECL_NAME.
  2353.     * cplus-init.c (do_friend): Ditto.
  2354.  
  2355.     * cplus-decl.c (start_function): If CURRENT_FUNCTION_DECL is a
  2356.     destructor, set up DESTRUCTOR_LABEL.
  2357.     * cplus-decl.c (finish_function): If DESTRUCTOR_LABEL is nonzero,
  2358.     expand just before calling base destructors.
  2359.     * cplus-typeck.c (c_expand_return): If DESTRUCTOR_LABEL is
  2360.     nonzero, jump there instead of just expanding the return.
  2361.  
  2362.     * collect.c (process): Change from
  2363.     (andrew%frip.wv.tek.com@relay.cs.net) to skip auxiliary entries.
  2364.  
  2365.     * All GNU C++ files merged from 1.35.97+ to 1.35.98.
  2366.  
  2367.     * cplus-decl.c (define_label): If a newly declared variable in the
  2368.     label's binding contour will need a cleanup, it must live in a new
  2369.     binding contour.
  2370.     * cplus-decl.c (define_case_label): New function.  Same goes for
  2371.     case labels.
  2372.     * cplus-parse.y (stmt): Call `define_case_label' for CASE
  2373.     statements.
  2374.  
  2375.     * cplus-decl.c (lookup_label): Record in variable NAMED_LABEL_USES
  2376.     for each label the variables currently in scope at the use of the
  2377.     label.
  2378.     * cplus-decl.c (define_label): Give error message if jump to label
  2379.     crosses variable initialization in the current scope.
  2380.  
  2381.     * cplus-decl.c (struct binding_level): Change field
  2382.     `more_cleanups_ok' from char to bitfield.  Added field
  2383.     `have_cleanups'.  Change other fields to bitfields so that
  2384.     `struct binding_level' fits in 7 words, which can be
  2385.     malloc'd in total of 32 bytes.
  2386.     * cplus-decl.c (PUSH_BINDING_LEVEL,maybe_build_cleanup):
  2387.     Initialize and set field `have_cleanups'.
  2388.     * cplus-decl.c (expand_label): Set `more_cleanups_ok' to zero when
  2389.     we cross a label.
  2390.  
  2391.     * stmt.c (struct stack_block): Added field `initialized_decls_p'
  2392.     for blocks which need their decls expanded before used.
  2393.     * stmt.c (expand_decl{_init}): Set field initialized_decls_p when
  2394.     appropriate.
  2395.  
  2396. Fri Sep  1 04:29:44 1989  Michael Tiemann  (tiemann at teacake)
  2397.  
  2398.     * Exception handling constructs recognized (but nothing working).
  2399.  
  2400.     * cplus-decl.c (init_decl_processing): Call `set_identifier_size'
  2401.     with a length, not a number of bytes.
  2402.  
  2403.     * cplus-class.c (build_class_init_list): Braino.
  2404.  
  2405.     * cplus-init.c (expand_aggr_init_1): Reinitialize virtual base
  2406.     class virtual function tables if they are set to wrong values by
  2407.     their constructors.
  2408.     * cplus-init.c (expand_aggr_init): Initialize virtual base class
  2409.     virtual function tables if they are not set any other way.
  2410.  
  2411.     * cplus-class.c (finish_struct): Use CLASSTYPE_VSIZE instead of
  2412.     TYPE_VIRTUAL_P to determine whether a particular class has virtual
  2413.     functions which belong in its vtable.  A type can be
  2414.     TYPE_VIRTUAL_P, meaning that *somewhere* it relies on virtual
  2415.     functions, but CLASSTYPE_VSIZE could be zero, meaning that it
  2416.     itself may not even have a virtual function table pointer.
  2417.     * cplus-decl.c (finish_file): Same changes.
  2418.     * cplus-decl.c (setup_vtbl_ptr): Same changes.
  2419.     * dbxout.c (dbxout_type): Same changes.
  2420.     * cplus-tree.c (layout_basetypes): Same changes.
  2421.  
  2422.     * cplus-class.c (finish_base_struct): Return 0 if all virtual
  2423.     functions come only from virtual baseclasses.  Also, do not put
  2424.     into VFIELDS those fields which come from virtual baseclasses.
  2425.     * cplus-class.c (modify_vtable_entry): Instead, run through by
  2426.     hand the virtual baseclasses whose virtual function tables need to
  2427.     be modified.  This means really using exactly the right
  2428.     associations for both base, context, and derived types.
  2429.     * cplus-class.c (prepare_fresh_vtable): Change parameter TYPE to
  2430.     CONTEXT_ASSSOC.  All callers changed.
  2431.  
  2432. Thu Aug 31 08:17:45 1989  Michael Tiemann  (tiemann at teacake)
  2433.  
  2434.     * cplus-class.c (finish_struct): Test MAX_HAS_VIRTUAL, not
  2435.     HAS_VIRTUAL to assign TYPE_VIRTUAL_P (T).
  2436.  
  2437.     * integrate.c (save_for_inline): Add new variable
  2438.     PARM_INITIALIZATION which is nonzero during parameter
  2439.     initialization (either from the stack or registers).
  2440.     * integrate.c (copy_for_inline): Only zero TREE_READONLY of parm
  2441.     if PARM_INITIALIZATION is zero.
  2442.     * integrate.c (expand_inline_function): Back out Aug 30
  2443.     TREE_INLINE change for PARM_DECLs.
  2444.     * cplus-decl.c, cplus-typeck.c: Ditto.
  2445.  
  2446.     * cplus-decl.c (finish_decl): Take into account case where static
  2447.     variable must be initialized ``by hand''.
  2448.  
  2449.     * cplus-typeck.c (store_init_value): Return VALUE if
  2450.     initialization could not be trivially performed for static
  2451.     variable.  Otherwise return NULL_TREE.
  2452.  
  2453.     * cplus-decl.c (get_temp_name): Add parameter STATICP.  All
  2454.     callers changed.
  2455.  
  2456.     * integrate.c (copy_rtx_and_substitute): Significantly simplify
  2457.     PLUS and MEM case after finding out that code from tList.cc could
  2458.     break the complex cases on Sparc.  Net effect: maybe more work for
  2459.     optimizer in later passes, and maybe more space occupied by inline
  2460.     insns during compilation.
  2461.  
  2462.     * expr.c (store_one_arg): Add test to see if we can avoid calling
  2463.     convert_units if possible.
  2464.  
  2465. Wed Aug 30 04:01:15 1989  Michael Tiemann  (tiemann at teacake)
  2466.  
  2467.     * toplev.c (main): Change +e[01] to -f+e[01], and move to
  2468.     lang_decode_option.
  2469.     * cplus-decl.c (lang_decode_option): Incorporate new flags.
  2470.  
  2471.     * integrate.c (copy_rtx_and_substitute): Don't build a SUBREG of a
  2472.     CONST_INT.
  2473.  
  2474.     * integrate.c (expand_inline_function): Change test of FORMAL from
  2475.     TREE_READONLY to TREE_INLINE.
  2476.     * cplus-typeck.c (build_modify_expr,build_unary_op): When
  2477.     modifying a PARM_DECL, set TREE_INLINE to 0.
  2478.     * cplus-decl.c (store_parm_decls): Set TREE_INLINE of PARM_DECL to
  2479.     1.
  2480.  
  2481.     * cplus-decl.c (finish_function): When finishing constructors, if
  2482.     simple case holds (no cleanups), just store CURRENT_CLASS_DECL
  2483.     into the DECL_RESULT of FNDECL and fall through.
  2484.  
  2485.     * integrate.c (expand_inline_function): Don't emit
  2486.     NOTE_INSN_DELETED notes.
  2487.  
  2488.     * cplus-parse.y (compstmt): Only save binding contour information
  2489.     if there actually were decls.
  2490.  
  2491.     * cplus-decl.c (finish_file): Argument LINENO was missing in calls
  2492.     to finish_function.
  2493.  
  2494. Tue Aug 29 23:03:17 1989  Michael Tiemann  (tiemann at teacake)
  2495.  
  2496.     * cplus-typeck.c (unary_complex_lvalue): Treat INIT_EXPR like
  2497.     MODIFY_EXPR.  Also, handle WITH_CLEANUP_EXPR case.
  2498.  
  2499.     * expr.c (expand_expr): Brainos in WITH_CLEANUP_EXPR case.
  2500.  
  2501.     * cplus-cvt.c (build_up_reference): Handle case where ARG is a
  2502.     WITH_CLEANUP_EXPR.
  2503.  
  2504.     * stmt.c (expand_function_end): *Don't* set REG_FUNCTION_VALUE_P.
  2505.  
  2506.     * tree.def [NEW_EXPR]: Change from 2 arguments to 3.  Third
  2507.     argument, if non-NULL, is cleanup expression to run after the
  2508.     new'd expression is used.  All users of NEW_EXPR changed.
  2509.  
  2510. Sun Aug 27 01:13:09 1989  Michael Tiemann  (tiemann at hobbes.ai.mit.edu)
  2511.  
  2512.     * stor-layout.c (layout_basetypes): Move from this file.
  2513.     * cplus-tree.c (layout_basetypes): To this one.
  2514.  
  2515.     * make-links.g++ (borrowed_files): typeclass.h is now a
  2516.     borrowed file.
  2517.  
  2518.     * cplus-decl.c (cleanup_after_call): New function.
  2519.     * cplus-typeck.c (build_compound_expr): Call it if neccesary.
  2520.     * cplus-typeck.c (build_c_cast): Ditto.
  2521.     * cplus-init.c (expand_cplus_expr_stmt): Ditto.
  2522.     * expr.c (expand_call): Remove code to allocate destructable stack
  2523.     slot if function return value is not used.
  2524.  
  2525.     * cplus-decl.c (init_decl_processing): `built_in_vec_delete' is
  2526.     NOT_BUILT_IN.
  2527.     * expr.c (expand_builtin): Don't try to expand EXPAND_VEC_DELETE.
  2528.  
  2529.     * cplus-init.c (build_vec_delete): Build the vector delete here;
  2530.     don't make a call to `__builtin_vec_delete'.
  2531.  
  2532.     * expr.c (expand_expr): Merge INIT_EXPR and MODIFY_EXPR.
  2533.     * expr.c (init_noncopied_parts): New function.
  2534.  
  2535.     * gcc.c: Merged completely.  Use GCC from standard distribution.
  2536.  
  2537. Sat Aug 26 10:38:14 1989  Michael Tiemann  (tiemann at hobbes.ai.mit.edu)
  2538.  
  2539.     * cplus-typeck.c (build_binary_op): Perform type instantiation if
  2540.     necessary.
  2541.  
  2542.     * cplus-class.c (instantiate_type,build_instantiated_decl): Change
  2543.     "type instantiation" to "overload" in various error messages.
  2544.     * cplus-class.c (instantiate_type): Also fix error message to
  2545.     report overload resolution failure only if function has more than
  2546.     one type signature declared.
  2547.  
  2548.     * cplus-class.c (instantiate_type): Call `mark_addressable' on
  2549.     result of instantiating something for an ADDR_EXPR.
  2550.  
  2551.     * 1.35.96 to 1.35.97+ changes:
  2552.     * Makefile: Change name of `cplus-parse.tab.*' to `cplus-tab.*'.
  2553.     * cplus-lex.c: Change #includes to reflect this.
  2554.     * cplus-decl.c: All merged except CURRENT_EXTERN_INLINE.
  2555.     * toplev.c: Changes for extern inlines not merged.
  2556.  
  2557.     * cplus-decl.c (finish_file): Reset FNNAME from DECL_NAME of the
  2558.     current function, since `start_function' may cause it to change if
  2559.     overloaded.  Also, push into C language context during the
  2560.     generation of file-level initializer/cleanup functions, since we
  2561.     don't want the extra-long names that overloading will give us.
  2562.  
  2563.     * cplus-decl.c,cplus-class.c,cplus-search.c: #include "obstack.h"
  2564.     instead of "cplus-obstack.h".
  2565.  
  2566.     * gnulib3.c: New file.  Provides initialization and cleanup
  2567.     services for GNU C++.  This should obviate the need for crt0.c.
  2568.     * crt1.c: Changed completely for new initialization/cleanup model.
  2569.     * cplus-decl.c (store_parm_decls): Put in special hooks to call
  2570.     `__main' from `main' for such purposes.
  2571.  
  2572. Thu Aug 24 02:11:42 1989  Michael Tiemann  (tiemann at yahi)
  2573.  
  2574.     * cplus-lex.c (check_newline): Only call unexec #ifndef
  2575.     DONT_HAVE_UNEXEC.
  2576.  
  2577.     * cplus-lex.c (reinit_parse_for_method)[USG]: If the buffer given
  2578.     to setvbuf is shorter than eight bytes long, setvbuf will (in
  2579.     violation of its man page) ignore the buffer and call malloc to
  2580.     get a bigger one.  Fixed.
  2581.  
  2582.     * cplus-typeck.c (comp_target_types): Permit converting from a T**
  2583.     to a T** which has different qualifiers.
  2584.  
  2585.     * gcc.c (collect_spec): Changes for sun386.
  2586.     * collect.c: Ditto.
  2587.     * config.g++: Ditto.
  2588.  
  2589.     * cplus-parse.y (primary): Handle case where unfound
  2590.     identifier comes from base class during class declaration.
  2591.  
  2592.     * cplus-init.c (build_member_ref): Handle uses of class-local
  2593.     enums and static members before type is completed.
  2594.  
  2595.     * cplus-decl.c (pushdecl_class_level): Put enums and static
  2596.     members into class scope as soon as they are seen.
  2597.     * cplus-decl.c (poplevel_class): Make sure to take them out upon
  2598.     leaving scope.
  2599.  
  2600.     * cplus-lex.c (build_lang_field_decl): Take new argument CODE to
  2601.     say what kind of decl to build.
  2602.     * cplus-decl.c,cplus-parse.y: All callers changed.
  2603.     * cplus-decl.c (grok_enum_decls): Call `build_lang_field_decl'
  2604.     instead of `build_lang_decl'.  Saves memory.
  2605.     * cplus-decl.c (grokdeclarator): Same change for VAR_DECLs local
  2606.     to structs.
  2607.     
  2608.     * cplus-typeck.c (build_modify_expr): Fix logic so that when
  2609.     assigning to `this', the error message about not being within a
  2610.     constructor or destructor is only emitted at the appropriate time.
  2611.  
  2612.     * cplus-tree.h [OPERATOR_NEW_FORMAT,OPERATOR_DELETE_FORMAT]:
  2613.     Define these.
  2614.     * cplus-method.c (build_opfncall): Use them.
  2615.  
  2616.     * cplus-tree.h [OPERATOR_MODIFY_FORMAT,OPERATOR_MODIFY_LENGTH,
  2617.     OPERATOR_CALL_FORMAT,OPERATOR_CALL_LENGTH,OPERATOR_ARRAY_FORMAT,
  2618.     OPERATOR_ARRAY_LENGTH]
  2619.     Define these.
  2620.     * cplus-decl.c (grok_op_properties): Use them.
  2621.     * cplus-init.c (add_friends): Ditto.
  2622.  
  2623.     * cplus-tree.h [VTBL_PTR_TYPE]: Define this.
  2624.     * cplus-decl.c (init_decl_processing): Use it.
  2625.  
  2626.     * cplus-tree.h [OPERATOR_METHOD_FORMAT,OPERATOR_METHOD_LENGTH]:
  2627.     Define these.
  2628.     * cplus-class.c (build_method_call): Use them.
  2629.  
  2630.     * cplus-class.c (compute_conversion_costs): Fix typo which would
  2631.     cause error message to be generated for calling a const member
  2632.     function with a non-const object.
  2633.  
  2634.     * Aug 24 03:10 g++.xtar.Z on ~ftp/pub
  2635.  
  2636.     * cplus-init.c (build_new): Braino involving -fthis-is-variable
  2637.     removed.
  2638.  
  2639. Wed Aug 23 00:12:29 1989  Michael Tiemann  (tiemann at yahi)
  2640.  
  2641.     * cplus-decl.c (finish_decl): Cannot forever remove READONLY
  2642.     attribute from decl needing initialization.
  2643.  
  2644.     * cplus-method.c (report_type_mismatch): Report error if calling
  2645.     non-const member function with const object.
  2646.  
  2647.     * cplus-class.c (convert_harshness,build_method_call): Finish
  2648.     implementing code to catch calls to non-const member functions
  2649.     with const objects.
  2650.  
  2651.     * cplus-class.c (build_method_call): No longer need to get to
  2652.     TYPE_MAIN_VARIANT for type information, such as TYPE_NEEDS_....
  2653.  
  2654.     * cplus-class.c (finish_struct): Set flags in all type variants.
  2655.     * cplus-parse.y (various places): Ditto.
  2656.  
  2657.     * integrate.c (expand_inline_function): No longer call abort if
  2658.     TREE_TYPE (arg) != TREE_TYPE (formal) for BLKmode parameter.  This
  2659.     can happen when TREE_TYPE (formal) == ERROR_MARK_NODE.
  2660.  
  2661. Tue Aug 22 09:06:32 1989  Michael Tiemann  (tiemann at yahi)
  2662.  
  2663.     * cplus-class.c (ideal_candidate): Use `function' member instead
  2664.     of `u.field' member of candidates.  The former is always properly
  2665.     set up, whereas the latter is set to 0 if the function used is a
  2666.     non-member function.
  2667.  
  2668.     * cplus-decl.c (groktypefield): Handle case where IDENTIFIER_NODE
  2669.     comes in which is not an aggregate type name.
  2670.  
  2671.     * cplus-method.c (hack_operator): Return ERROR_MARK_NODE if
  2672.     operator name is missing.
  2673.     * cplus-parse.y: Callers changed to deal with this.
  2674.  
  2675.     * cplus-search.c (various places): Most calls to
  2676.     `error_with_aggr_type' were wrong, leading to backward error
  2677.     messages (such as `member `A' not found for class `memfunc').
  2678.     Changed back to call `error' with appropriate parameters.
  2679.  
  2680.     * cplus-search.c (lookup_fnfields): Braino in printing error
  2681.     message: TREE_VALUE (entry) is a BASELINK (a TREE_LIST of
  2682.     TREE_LISTs), not a TREE_LIST.
  2683.  
  2684.     * cplus-decl.c (grokdeclarator): Handle missing operator name for
  2685.     for OP_IDENTIFIER case.
  2686.  
  2687.     * cplus-init.c (finish_base_init): If the vtable installed by the
  2688.     constructor was not the right one, fix after call to base
  2689.     constructor, before derived initialization.
  2690.  
  2691.     * cplus-decl.c (store_parm_decls): New parm PRESERVE is nonzero if
  2692.     we should preserve the data containing the function parameters.
  2693.     This is normally done for inline functions, but also needs to be
  2694.     done for constructors of classes which use virtual baseclasses.
  2695.     * cplus-decl.c (finish_function): Don't set DECL_ARGUMENTS (FNDECL)
  2696.     to zero if above condition holds.
  2697.     * cplus-decl.c, cplus-parse.y: all callers of store_parm_decls
  2698.     modified.
  2699.  
  2700.     * cplus-tree.c (hash_tree_chain): New function.  Simplified
  2701.     version of hash_tree_cons.
  2702.     * cplus-parse.y (declmods): Use `hash_tree_chain' to build up
  2703.     lists which are not destroyed during parsing.  They can be reused
  2704.     throughout the rest of the parse.
  2705.  
  2706. Mon Aug 21 09:51:47 1989  Michael Tiemann  (tiemann at yahi)
  2707.  
  2708.     * cplus-init.c (expand_aggr_init_1): Replace PARM_DECL rtl's with
  2709.     actual values to parameters.
  2710.  
  2711.     * cplus-init.c (expand_aggr_vbase_init): Only try initializing
  2712.     base classes here if FNDECL is nonzero.
  2713.     * cplus-init.c (expand_aggr_init_1): Try initializing them here in
  2714.     that case instead.
  2715.  
  2716.     * cplus-decl.c (finish_decl): We can initialize a const& from a
  2717.     const int, etc.
  2718.  
  2719.     * cplus-init.c (expand_vec_delete): Only warn about ignored array
  2720.     size expressions if EXTRA_WARNINGS.
  2721.  
  2722.     * cplus-init.c (build_new): Don't forget to allocate space for
  2723.     vectors.
  2724.  
  2725.     * cplus-init.c (add_friend): If the friend is not of METHOD_TYPE,
  2726.     set CTYPE = ERROR_MARK_NODE.  This prevents false friend matches
  2727.     due to fact that `is_friend' assumes that if CURRENT_CLASS_TYPE ==
  2728.     TREE_PURPOSE (friends), that a class-match has occured.
  2729.  
  2730.     * stmt.c (expand_end_bindings): Don't let cleanups affect ({...})
  2731.     constructs.
  2732.  
  2733.     * cplus-decl.c (finish_decl): When initializing one reference from
  2734.     another, make sure that we wrap the initializer in a SAVE_EXPR if
  2735.     it is TREE_VOLATILE.
  2736.  
  2737.     * cplus-class.c (compute_conversion_costs): Check that FORMAL_TYPE
  2738.     is not ERROR_MARK_NODE.
  2739.  
  2740.     * tree.h (tree_type): Delete unused field `parse_info'.
  2741.  
  2742.     * cplus-decl.c (setup_vtbl_ptr): Add tests for OPTIMIZE and that
  2743.     CURRENT_FUNCTION_DECL is not DECL_STATIC_FUNCTION_P.
  2744.  
  2745. Sun Aug 20 12:09:30 1989  Michael Tiemann  (tiemann at yahi)
  2746.  
  2747.     * cplus-decl.c,cplus-typeck.c (various places): Check for
  2748.     CONST_DECL in addition to TREE_READONLY VAR_DECLs when needing
  2749.     constants for various purposes.
  2750.  
  2751. Sat Aug 19 12:27:41 1989  Michael Tiemann  (tiemann at yahi)
  2752.  
  2753.     * cplus-class.c (build_method_call): Handle case where
  2754.     INSTANCE_PTR is integer_zerop.  This can happen with casts like
  2755.     { return ((Object*)0)->Object::IsA(); }
  2756.  
  2757. Fri Aug 18 01:14:02 1989  Michael Tiemann  (tiemann at yahi)
  2758.  
  2759.     * cplus-class.c (build_method_call): Complain about using abstract
  2760.     function only if INSTANCE is of known abstract type.
  2761.  
  2762.     * cplus-class.c (add_method): Don't crash if FIELDS is 0.
  2763.  
  2764.     * dbxout.c (dbxout_type): Don't crash if type only defines
  2765.     constructors and destructors.
  2766.  
  2767.     * cplus-typeck.c (build_component_ref): If METHOD_VEC is 0, break
  2768.     out of loop.
  2769.  
  2770.     * cplus-decl.c (finish_file): Don't abort if INIT is 0.
  2771.  
  2772. Thu Aug 17 21:55:35 1989  Michael Tiemann  (tiemann at yahi)
  2773.  
  2774.     * cplus-parse.y (LC): If the type we get left of a '{'
  2775.     !IS_AGGR_TYPE, then make a fake node which can hold our types for
  2776.     us.
  2777.  
  2778.     * cplus-init.c (do_friend): Argument missing in call to
  2779.     grokclassfn.
  2780.  
  2781.     * cplus-decl.c (poplevel): Only call `expand_end_bindings' if the
  2782.     level being popped needed an `expand_start_bindings' to get going.
  2783.     This only happens if the level is specifically to hold
  2784.     temporaries (i.e., when the KEEP field is < 0).
  2785.  
  2786.     * cplus-decl.c (finish_decl): Emit a sorry message if the _DECL
  2787.     needs constructing, and is not at toplevel.
  2788.  
  2789.     * cplus-class.c (build_method_call): Complain about incomplete
  2790.     types only if (FLAGS&LOOKUP_COMPLAIN).
  2791.  
  2792. Wed Aug 16 17:11:22 1989  Michael Tiemann  (tiemann at yahi)
  2793.  
  2794.     * toplev.c (compile_file), cplus-lex.c (yylex): Use setjmp/longjmp
  2795.     to communicate fact that dump was just performed.  This prevents
  2796.     duplicate bytes being written to the asm file, due to inline
  2797.     functions being written out by both original and dumped compilers.
  2798.  
  2799.     * toplev.c (compile_file): Hack to make dumped compiler move bytes
  2800.     quickly from old asm file to new.
  2801.  
  2802.     * cplus-search.c (build_mi_virtuals,free_mi_matrix): Pointer
  2803.     arithmetic for mi_vmatrix accesses were off by 1.
  2804.  
  2805.     * cplus-class.c (build_method_call): Handle case where INSTANCE
  2806.     has a POINTER_TYPE type.  This is when it is a dummy argument for
  2807.     `operator new ()'.
  2808.  
  2809. Tue Aug 15 00:05:49 1989  Michael Tiemann  (tiemann at yahi)
  2810.  
  2811.     * cplus-decl.c (grokclassfn): `const' member function information
  2812.     was being lost.
  2813.  
  2814.     * cplus-class.c (build_method_call): Generate error message when
  2815.     passing const objects to non-const member functions.
  2816.  
  2817.     * cplus-class.c (finish_struct): METHOD_VEC must track the object
  2818.     being grown on the class obstack.
  2819.  
  2820.     * cplus-method.c (dump_type{_prefix}): Print `class' instead of
  2821.     `struct' if declared as class.
  2822.  
  2823.     * cplus-method.c (build_{decl,typename}_overload,do_actual_overload,
  2824.     fndecl_as_string): Distinguish `const' member functions from
  2825.     normal member functions.
  2826.  
  2827.     * cplus-search.c (get_base_type): Distinguish whether we want to
  2828.     know if a public field of baseclass is protected, or whether a
  2829.     conversion from derived to base class is protected by passing
  2830.     either 1 or 2 to the argument PROTECT.
  2831.     * cplus-search.c (get_base_distance): If protect is non-zero,
  2832.     always emit an error message if conversion from derived to base
  2833.     class is across a private visibility boundary.
  2834.  
  2835.     * cplus-cvt.c (convert_to_reference): Don't violate visibility
  2836.     rules when converting to references.  Add parameter PROTECT to
  2837.     control this behavior.  All callers changed.
  2838.     * cplus-cvt.c (build_up_reference): Ditto.
  2839.  
  2840. Mon Aug 14 00:03:46 1989  Michael Tiemann  (tiemann at yahi)
  2841.  
  2842.     * stmt.c (expand_end_case): Incorporate rfg's bugfix for
  2843.     optimizing case statements with signed negative test term.
  2844.  
  2845.     * cplus-search.c (reinit_search_statistics): New function.
  2846.     * toplev.c (compile_file): Call that function if BEEN_HERE_BEFORE.
  2847.  
  2848.     * cplus-decl.c: Remove explicit initializations from static
  2849.     variables--let them sit in common rather than data space.
  2850.     * cplus-method.c: Ditto.
  2851.  
  2852.     * Makefile,toplev.v, cplus-decl.c, cplus-lex.c: Incorporated
  2853.     changes from Bryan Boreham <kewill!bryan@uunet.uu.net> to dump a
  2854.     running GNU C++ for later reexecing.
  2855.     * unexec.c,lastfile.c: borrowed from GNU Emacs
  2856.     * unex-addr.c,getpagesize.h: New files
  2857.  
  2858.     * Aug 14 13:07 g++.xtar.Z on ~ftp/pub
  2859.  
  2860.     * cplus-decl.c (finish_file): Handle case where initializer for
  2861.     one static aggregate is another.  Do so by disabling code which
  2862.     assumed the wrong thing in that case.
  2863.  
  2864.     * cplus-search.c, cplus-tree.c, cplus-class.c: Major surgery on
  2865.     assoc lists.  Virtual baseclasses are no longer represented in the
  2866.     main assoc list of a type.  CLASSTYPE_VBASECLASSES already holds
  2867.     such information.  Various functions changed and/or simplified to
  2868.     use value from that assoc list when needed.
  2869.  
  2870.     * cplus-decl.c (grokdeclarator): Don't get confused by
  2871.     non-storageclass bits in SPECBITS when DECL_CONTEXT == FIELD.
  2872.  
  2873.     * cplus-init.c (expand_aggr_init_1): Only check whether a new
  2874.     value has been assigned to `this' by the base class if
  2875.     FLAG_THIS_IS_VARIABLE is nonzero.
  2876.  
  2877.     * cplus-init.c (expand_aggr_init_1,build_new): Function
  2878.     `expand_aggr_vbase_init_1' was the wrong thing.  Change these
  2879.     functions to call `expand_aggr_vbase_init' instead.
  2880.     Also, #ifdef'd out `expand_aggr_vbase_init_1'.
  2881.  
  2882.     * cplus-search.c: Move assoc code from here...
  2883.     * cplus-tree.c: ...to here.
  2884.  
  2885.     * cplus-decl.c (lang_printable_name): Don't print return type for
  2886.     constructors or destructors.
  2887.  
  2888.     * cplus-class.c (finish_struct): Set TYPE_NEEDS_CONSTRUCTING bit
  2889.     if any default members.
  2890.  
  2891.     * cplus-decl.c (finish_file): Remove test for
  2892.     TYPE_NEEDS_CONSTRUCTING when considering vars in
  2893.     STATIC_AGGREGATES.  If something made it to this list, it should
  2894.     be initialized.
  2895.  
  2896. Sun Aug 13 14:25:55 1989  Michael Tiemann  (tiemann at yahi)
  2897.  
  2898.     * cplus-decl.c: Rename static variable GLOBAL_AGGREGATES to
  2899.     STATIC_AGGREGATES.
  2900.     * cplus-decl.c (finish_decl): Put static aggregates on the
  2901.     STATIC_AGGREGATES list if the VAR_DECL is TREE_STATIC.  It does
  2902.     not have to be at the global_binding_level to get this treatment.
  2903.     Also, rename variable OLDGLOBAL to OLDSTATIC, and remove error
  2904.     messages which are no longer needed due to this change.
  2905.  
  2906.     * cplus-typeck.c (comptypes): Qualifiers must match.  (Fix taken
  2907.     from GCC).
  2908.  
  2909.     * cplus-init.c (expand_aggr_{vbase}_init,expand_recursive_init):
  2910.     provide arguments INPUT_FILENAME and LINENO to
  2911.     `expand_asm_operands'.
  2912.     * cplus-search.c (init_vbase_pointers,build_vbase_vtables_init):
  2913.     Ditto.
  2914.  
  2915.     * cplus-class.c (push_lang_context): Don't set current_lang_name
  2916.     if it is not a name we recognize.
  2917.  
  2918.     * All GNU C++ files: Merged changes from 1.35.95 to 1.35.96.
  2919.  
  2920. Sat Aug 12 00:27:43 1989  Michael Tiemann  (tiemann at yahi)
  2921.  
  2922.     * cplus-decl.c (finish_function): Call use_variable on
  2923.     CURRENT_VTABLE_DECL if it is non-NULL.
  2924.  
  2925.     * cplus-decl.c (finish_decl): Call build_indirect_ref instead of
  2926.     building the INDIRECT_REF by hand when setting the decl reference
  2927.     slot.
  2928.  
  2929.     * cplus-obstack.h: New file.  Defines obstack_int_grow and
  2930.     obstack_ptr_grow.  Cuts many calls to bcopy.
  2931.     * cplus-class.c: Use cplus-obstack.h instead of obstack.h.
  2932.     * cplus-search.c: Ditto.
  2933.  
  2934.     * cplus-parse.y (aggr): Fix minor nits in error messages.
  2935.  
  2936.     * cplus-class.c (finish_struct): Removed code which redundantly
  2937.     called `finish_decl' on static class members.
  2938.  
  2939.     * cplus-decl.c (finish_decl): C++ 2.0 now permits static class
  2940.     members to be of types with constructors.
  2941.  
  2942.     * cplus-search.c (bfs_unmark_finished_struct): Don't call
  2943.     assoc_value if TYPE == CURRENT_CLASS_TYPE.
  2944.  
  2945.     * cplus-search.c (assoc_value): Call compiler_error if we have
  2946.     multiple baseclass hits.  Also, make this function look for
  2947.     matches recursively.  This saves having to flatten out the
  2948.     hierarchy all the time, saving storage.
  2949.  
  2950.     * cplus-init.c (expand_recursive_init_1): Take into account fact
  2951.     that there is no virtual function table initialization needed if
  2952.     CLASSTYPE_NEEDS_VIRTUAL_REINIT set TREE_VALUE (init_list) to
  2953.     NULL_TREE.
  2954.     * cplus-class.c (build_class_init_list): Set up init lists
  2955.     correctly if the derived class just takes virtual function table
  2956.     initialization from the base class.
  2957.  
  2958.     * cplus-init.c (finish_base_init): Unmark fields initialized which
  2959.     belong to base classes.
  2960.  
  2961.     * cplus-decl.c (grokdeclarator,duplicate_decls): Implement C++ 2.0
  2962.     interpretation of `const'.
  2963.  
  2964.     * Aug 12 08:33 g++.xtar.Z on ~ftp/pub
  2965.  
  2966.     * cplus-typeck.c (commontype): Case for REFERENCE_TYPE appeared to
  2967.     be missing.
  2968.     * cplus-typeck.c (comptypes): Ditto.
  2969.  
  2970.     * cplus-typeck.c (comp_target_parms): Braino caused this function
  2971.     to return after processing just the first argument!
  2972.  
  2973.     * cplus-typeck.c (comp_target_parms,compparms): Take
  2974.     contravariance into account for argument lists.
  2975.  
  2976. Fri Aug 11 04:58:40 1989  Michael Tiemann  (tiemann at yahi)
  2977.  
  2978.     * cplus-tree.c (list_hash): Implement hashing scheme for
  2979.     unchanging list nodes, such as compose TYPE_BASELINKS.
  2980.     Several new functions and data structures implement this.
  2981.     * cplus-search.c (get_baselinks): Call hash_tree_cons instead of
  2982.     tree_cons to get fresh nodes.
  2983.  
  2984.     * tree.c (init_tree): Remove call to bzero for hash_table.
  2985.  
  2986.     * cplus-init.c (expand_aggr_init): Typo in call to
  2987.     expand_vec_init.
  2988.  
  2989.     * newld.c (decode_command): Fix failure to bzero all entries in
  2990.     FILE_TABLE.
  2991.  
  2992.     * cplus-lex.c (cons_up_dtor_for_type): Add missing QUALS
  2993.     parameter in call to start_method.
  2994.  
  2995.     * cplus-decl.c (start_function): Set TREE_READONLY and
  2996.     TREE_VOLATILE bits of C_C_D.
  2997.     * cplus-class.c (popclass): Ditto.
  2998.  
  2999.     * cplus-tree.c (build_cplus_method_type): New function.  Like
  3000.     `build_method_type', but permits qualifiers for the instance
  3001.     variable.
  3002.     * cplus-tree.h: Declare it.
  3003.     * cplus-decl.c (grokdeclarator,grokclassfn): Call this function
  3004.     instead of build_method_type.
  3005.  
  3006.     * tree.c (build_method_type): Set TYPE_METHOD_BASETYPE from the
  3007.     TYPE_MAIN_VARIANT of BASETYPE.
  3008.  
  3009.     * cplus-lex.c (gplus.input): Change `friend' from TYPE_QUAL to
  3010.     SCSPEC.
  3011.  
  3012.     * cplus-parse.y (fn.def1): Permit const and volatile member
  3013.     functions.
  3014.     * cplus-method.c (stash_inline_prefix): Handle case of const and/or
  3015.     volatile member functions declared inside class.
  3016.     * cplus-decl.c (start_{method,function}): Grok const and volatile
  3017.     member functions.
  3018.     * cplus-decl.c (grokdeclarator): New parameter QUALS.
  3019.  
  3020.     * cplus-typeck.c (readonly_warning_or_error): If ARG is a
  3021.     PARM_DECL, print its name.  Also, if the message is due to the
  3022.     underlying structure of a COMPONENT_REF, tell user the
  3023.     member name instead of trying to hunt down the structure name.
  3024.     also, if ARG is a reference variable or parameter, name the
  3025.     reference as well.
  3026.  
  3027.     * cplus-cvt.c (build_up_reference): Handle case where we build a
  3028.     reference to a sub-object of an object which uses multiple
  3029.     inheritance.
  3030.  
  3031.     * cplus-class.c (finish_struct): Simplify conditions under which
  3032.     CLASSTYPE_NEEDS_VIRTUAL_REINIT is used, and use it.
  3033.  
  3034. Thu Aug 10 00:13:03 1989  Michael Tiemann  (tiemann at yahi)
  3035.  
  3036.     * cplus-parse.y (member_init): If base class is virtual, save the
  3037.     intializer on the permanent_obstack.
  3038.  
  3039.     * cplus-init.c (expand_aggr_vbase_init_1): New function.  Called
  3040.     to actually walk the virtual baseclass initialization list.
  3041.  
  3042.     * cplus-init.c (expand_aggr_vbase_init): New argument DECL is
  3043.     the FUNCTION_DECL for the constructor by which this object is
  3044.     initialized.  From that constructor comes the virtual base class
  3045.     initialization list.
  3046.  
  3047.     * cplus-init.c (finish_base_init): Store initializers for virtual
  3048.     base classes.
  3049.  
  3050.     * cplus-tree.h (lang_decl): Add new field `vbase_init_list'.
  3051.     Holds initializers for virtual base classes.
  3052.  
  3053.     * cplus-init.c (build_new): Arrange to initialize virtual
  3054.     baseclasses before calling constructor if FLAG_THIS_IS_VARIABLE
  3055.     is zero.  Otherwise, constructor will call it on allocation.
  3056.  
  3057.     * cplus-cvt.c (convert_to_nonzero_pointer): If EXPR is already
  3058.     of type TYPE, don't build a NOP_EXPR; instead, just return
  3059.     EXPR.
  3060.  
  3061.     * cplus-class.c (build_method_call): If INSTANCE is NULL_TREE,
  3062.     then pre-allocate storage for the constructor.  After that, if
  3063.     there are virtual baseclasses to initialize, initialize them right
  3064.     away.  Then call constructor with resulting argument.
  3065.  
  3066.     * cplus-decl.c (flag_this_is_variable): Change default from 1 to 0.
  3067.     * cplus-decl.c (lang_decode_option): Recognize
  3068.     `-fthis-is-variable' on command line.
  3069.     * cplus-decl.c (finish_function): Don't emit test for whether `this'
  3070.     is zero if FLAG_THIS_IS_VARIABLE is zero.  Check both constructor
  3071.     and destructor case.
  3072.     * cplus-decl.c (grokclassfn): Make `this' a *const if
  3073.     !FLAG_THIS_IS_VARIABLE.
  3074.  
  3075.     * cplus-search.c (build_mi_matrix): Initialize MI_SIZE when
  3076.     reusing an old mi-matrix.
  3077.  
  3078.     * cplus-cvt.c (convert_to_nonzero_pointer): Abort if argument is
  3079.     integer_zerop.
  3080.  
  3081.     * cplus-class.c (build_method_call): Simplify code, mostly for
  3082.     speed.
  3083.  
  3084.     * cplus-search.c (lookup_field): Use my_tree_cons instead of
  3085.     tree_cons for looking up fields.
  3086.  
  3087.     * cplus-search.c (my_{tree_cons,build_string}): Use SET_TREE_CODE
  3088.     to set tree code.
  3089.  
  3090.     * cplus-decl.c (finish_decl): Initialize globals whose type needs
  3091.     constructing, but ! IS_AGGR_TYPE (type), with empty_init_node to
  3092.     keep assemble_variable from crashing.
  3093.  
  3094.     * cplus-search.c (build_mi_matrix): Take into account
  3095.     CLASSTYPE_N_VBASECLASSES when computing MI_SIZE.
  3096.     * cplus-class.c (finish_struct): Braino: set
  3097.     CLASSTYPE_N_VBASECLASSES after calling layout_vbasetypes.
  3098.  
  3099.     * cplus-class.c (finish_base_struct): Set MAX_HAS_VIRTUAL
  3100.     regardless of whether base class is a virtual baseclass or not.
  3101.     * cplus-class.c (finish_struct): Also, set MAX_HAS_VIRTUAL
  3102.     taking into account virtual baseclasses.
  3103.     * cplus-tree.c (layout_vbasetypes): Takes new arg PMAX which
  3104.     passes info of maximum number of virtual functions defined in
  3105.     virtual baseclasses from this function to finish_struct.
  3106.  
  3107.     * cplus-class.c (finish_struct): Set MAX_HAS_VIRTUAL if
  3108.     HAS_VIRTUAL is set.
  3109.  
  3110.     * cplus-class.c (modify_vtable_entry): If VFIELD can be
  3111.     NULL_TREE, if the current class has no virtual function except
  3112.     those inherited from a virtual baseclass.  In such a case,
  3113.     NORMAL will be zero.
  3114.  
  3115.     * cplus-lex.c (copy_type_lang_specific): Copy the array of
  3116.     basetypes so that CLASSTYPE_BASECLASS (t, i) gives the right
  3117.     baseclass.
  3118.  
  3119. Wed Aug  9 10:41:17 1989  Michael Tiemann  (tiemann at yahi)
  3120.  
  3121.     * cplus-typeck.c (c_expand_return): Don't pass return value though
  3122.     a temporary if there are no pending cleanups.
  3123.     * stmt.c (no_pending_cleanups): New function to support above
  3124.     change.
  3125.  
  3126.     * stmt.c (assign_parms): Add test to see if we can avoid calling
  3127.     convert_units if possible.
  3128.  
  3129.     * cplus-decl.c (grokparms): Use variables LAST_RESULT and
  3130.     LAST_DECL to eliminate need to call `chainon'.
  3131.  
  3132.     * stmt.c (expand_fixup,expand_start_bindings): Use static variable
  3133.     EMPTY_CLEANUP_LIST to short-circuit cleanup checking, and also
  3134.     cut down on calls to tree_cons, in new binding contours, which are
  3135.     quite frequent in C++ (20% of calls to tree_cons, and 5% of total
  3136.     TREE_LIST nodes).
  3137.  
  3138.     * stmt.c (expand_start_*): Build new nesting level structure on
  3139.     obstack instead of calling malloc.  New variable STMT_OBSTACK.
  3140.     New function `init_stmt'.
  3141.     * toplev.c: Call `init_stmt'.
  3142.  
  3143.     * obstack.h (obstack_{ptr,int}_grow): New macros.
  3144.  
  3145.     * cplus-cvt.c (build_default_{binary,unary}_type_conversion):
  3146.     Handle case where one (or both) incoming types are "C" types, not
  3147.     "C++" types.
  3148.  
  3149.     * cplus-cvt.c (convert_to_pointer): If we go through any virtual
  3150.     base pointers, make sure that casts to BASETYPE from the last
  3151.     virtual base class use the right value for BASETYPE.
  3152.  
  3153.     * cplus-search.c (dfs_find_vbases): VBASES are now TREE_VECs,
  3154.     not TREE_LISTS.  Change variable named OFFSET_INFO to ASSOC,
  3155.     and use accordingly.
  3156.  
  3157.     * cplus-search.c (dfs_get_vbase_types): Make assocs in VBASE_TYPES
  3158.     contain the true basetype, not its MAIN_VARIANT.
  3159.  
  3160. Tue Aug  8 00:19:43 1989  Michael Tiemann  (tiemann at yahi)
  3161.  
  3162.     * stor-layout.c (layout_basetypes): Don't inherit assoc info.
  3163.     Synthesize it instead.
  3164.  
  3165.     * cplus-class.c (finish_struct): Reenable code which fills in
  3166.     virtual function tables of virtual baseclasses.
  3167.  
  3168.     * cplus-class.c (finish_struct): Fill in virtual function table
  3169.     with values which come from virtual or non-leftmost baseclasses.
  3170.     These are not filled in correctly by `modify_vtable_entry', which
  3171.     for these cases, only correctly allocates their skeleton.
  3172.  
  3173.     * cplus-class.c (modify_vtable_entry): Only call get_base_distance
  3174.     when BASE != CONTEXT.
  3175.  
  3176.     * cplus-search.c (get_base_distance): Don't push a search_stack
  3177.     level until we know we need it and will use it.
  3178.  
  3179.     * cplus-class.c (modify_vtable_entry): Once we know what vtable is
  3180.     of interest, set BASE to the best approximation of T's vtable we
  3181.     know.  I.e., set it to the vtable for the immediate super-class of
  3182.     T.
  3183.  
  3184. Mon Aug  7 17:12:31 1989  Michael Tiemann  (tiemann at yahi)
  3185.  
  3186.     * cplus-class.c (finish_struct): When extending the bounds of the
  3187.     virtaul function table, keep VFIELDS as it was; don't move it up
  3188.     the inheritance tree.
  3189.  
  3190.     * cplus-class.c (finish_struct): No need to allocate a lang_decl
  3191.     for the virtual function table pointer FIELD_DECL.  Others need
  3192.     bits, but not bytes that FUNCTION_DECLs need.
  3193.  
  3194.     * cplus-init.c (build_virtual_init): For now, assume that FOR_TYPE
  3195.     and TYPE may be distinct, so use assoc lists to find the right
  3196.     vtable.
  3197.  
  3198.     * cplus-init.c (expand_recursive_init_1): Initialize the virtual
  3199.     function table of sub-components of aggregates driven by
  3200.     sub-component.  Otherwise, we have to initialize the virtual
  3201.     function table driven by the caller who knows what sub-components
  3202.     must be initialized.  Question: will this cause multiple
  3203.     initialization of vtables which are not down the left-hand side?
  3204.     Answer is probably yes.
  3205.  
  3206.     * tree.c (make_tree_vec): New function.
  3207.  
  3208.     * tree.c (copy_node): Now handles TREE_VEC correctly.
  3209.  
  3210.     * cplus-search.c ({make,copy}_assoc,assoc_value,debug_dump_assoc):
  3211.     Change representation of assoc list from TREE_LIST to TREE_VEC
  3212.     representation.
  3213.     * cplus-tree.h (ASSOC_* macros): Also here.
  3214.  
  3215.     * cplus-typeck.c (process_init_constructor): Don't complain about
  3216.     non-initialization of static class members, regardless of whether
  3217.     they are in global scope or not.  (Previously only complained when
  3218.     at global scope.)
  3219.  
  3220.     * cplus-class.c (finish_struct): Allocate method_vec if members
  3221.     need destructors.
  3222.  
  3223. Sun Aug  6 10:23:31 1989  Michael Tiemann  (tiemann at yahi)
  3224.  
  3225.     * cplus-class.c (finish_struct): Eliminate redundant
  3226.     initialization of class fields to 0.
  3227.  
  3228.     * cplus-parse.y (parm rules): Use void_list_node instead of
  3229.     build_tree_list (NULL_TREE, void_type_node) where possible.
  3230.  
  3231.     * print-tree.c (dump): Handle TREE_VEC case.
  3232.  
  3233.     * cplus-init.c (add_method): Modified, and moved to cplus-class.c.
  3234.  
  3235.     * cplus-tree.h (lang_type): Change representation of list of
  3236.     member functions from list of lists to vector of lists.
  3237.     * cplus-class.c (finish_struct,build_method_call): Also here.
  3238.     * cplus-method.c (do_inline_function_hair): Also here.
  3239.     * cplus-decl.c (grokclassfn): Also here.
  3240.     * cplus-init.c (build_delete,build_member_ref): Also here
  3241.     * cplus-ptree.c (walk_lang_type): Also here.
  3242.     * cplus-search.c (lookup_fnfields{_1},get_baselinks,dfs_pushdecls,
  3243.     dfs_compress_decls,dfs_popdecls): Also here.
  3244.     * cplus-typeck.c (build_component_ref): Also here.
  3245.     * dbxout.c (dbxout_type): Also here.
  3246.  
  3247.     * cplus-class.c (build_method_call): Remove vestigal use of
  3248.     OVERLOAD_MAX_LEN.
  3249.  
  3250. Sat Aug  5 09:49:48 1989  Michael Tiemann  (tiemann at yahi)
  3251.  
  3252.     * cplus-decl.c (grokparms): Reuse TREE_LIST node in usual case of
  3253.     parameter processing.
  3254.  
  3255.     * cplus-decl.c (init_decl_processing): Do things here which used
  3256.     to be done in toplev.c
  3257.     * toplev.c (various places): Merge with GCC.
  3258.  
  3259. Fri Aug  4 17:47:24 1989  Michael Tiemann  (tiemann at yahi)
  3260.  
  3261.     * stor-layout.c (genop): Avoid creating new nodes when old ones
  3262.     will do.
  3263.     * stor-layout.c (build_int): Cache sizes we have made for types.
  3264.  
  3265. Thu Aug  3 21:44:04 1989  Michael Tiemann  (tiemann at yahi)
  3266.  
  3267.     * cplus-decl.c (pushdecl): Canonicalize enum typedefs same as
  3268.     struct, class, and unions.
  3269.  
  3270.     * cplus-init.c (resolve_member_ref): When member is of
  3271.     METHOD_TYPE, return logical address of the member, not the member
  3272.     itself.  The member itself has type METHOD_TYPE, which has mode
  3273.     EPmode, which is not a valid mode for expand_expr.
  3274.  
  3275.     * cplus-init.c (expand_vec_delete): When calling vector delete on
  3276.     store which does not need destructors, just ignore the argument,
  3277.     and delete the container (array) instead.
  3278.  
  3279.     * cplus-decl.c (start_function): Handle case where OLDDECL comes
  3280.     back as a TREE_LIST.
  3281.  
  3282. Wed Aug  2 10:54:54 1989  Michael Tiemann  (tiemann at yahi)
  3283.  
  3284.     * collect.c (process): Initialize ldptr to NULL if COFF is defined.
  3285.  
  3286.     * cplus-method.c (stash_inline_prefix): String name of function is
  3287.     IDENTIFIER_POINTER (DECL_NAME (...)), not DECL_NAME.
  3288.  
  3289. Mon Jul 31 12:14:35 1989  Michael Tiemann  (tiemann at yahi)
  3290.  
  3291.     * cplus-decl.c (finish_decl): Handle case where INIT can be a
  3292.     TREE_LIST when initializing a named return value.  Specifically,
  3293.     translate a TREE_LIST into a COMPOUND_EXPR when initializing a
  3294.     referece.
  3295.  
  3296.     * toplev.c (compile_file): Gripe about *non*-extern functions
  3297.     declared static but not defined.
  3298.  
  3299.     * cplus-init.c (build_delete): Keep ADDR parameter from being
  3300.     evaluated multiple times if TREE_VOLATILE.
  3301.  
  3302.     * cplus-decl.c (grok_function_init): Note whether DECL is an
  3303.     uninheritable virtual (i.e., a virtual function of an "abstract
  3304.     class").
  3305.     * cplus-tree.h (lang_decl): Add bit to record above info.
  3306.     * cplus-class.c (build_method_call): Give error if compiler can
  3307.     detect that user is attempting to call this function for an object
  3308.     whose type is that of the "abstract class".
  3309.  
  3310.     * gcc.c (link_spec): Make libg++.a available via %s rather than
  3311.     from -lg++.
  3312.  
  3313. Fri Jul 28 00:22:14 1989  Michael Tiemann  (tiemann at yahi)
  3314.  
  3315.     * cplus-typeck.c (comp_target_types): Take contravariance into
  3316.     account for OFFSET_TYPE.
  3317.  
  3318.     * cplus-decl.c (grokdeclarator): When declaring an array, always
  3319.     call suspend momentary, since the TYPE_DOMAIN of the array may be
  3320.     needed later, for instance by expand_vec_delete.
  3321.     * cplus-parse.y (nonmomentary_expr): Second change needed to
  3322.     ensure that above condition is met.
  3323.  
  3324.     * cplus-decl.c (grokdeclarator): Handle case of derived class
  3325.     declaring member function static when derived class declared
  3326.     member function virtual.
  3327.  
  3328.     * cplus-decl.c (grokparms): Permit functions which have default
  3329.     arguments to end with `...'.
  3330.     cplus-typeck.c (actualparameterlist): Handle this new case.
  3331.  
  3332.     * cplus-typeck.c (c_expand_return): Handle case where conversion
  3333.     to return type of function returns ERROR_MARK_NODE.
  3334.  
  3335.     * cplus-init.c (build_delete): Handle case where member type is
  3336.     ARRAY_TYPE.
  3337.  
  3338.     * cplus-parse.y (component_decl): Handle case of missing ';'
  3339.     before '}'.
  3340.  
  3341.     * cplus-typeck.c (c_expand_start_case): Handle case where switch
  3342.     quantity is a MEMBER_REF.
  3343.  
  3344.     * cplus-method.c (build_component_type_expr): Handle case of
  3345.     calling non-virtual type conversion operators.
  3346.  
  3347.     * cplus-decl.c (shadow_tag): Make permanent any type created here.
  3348.  
  3349.     * gcc.c (struct compiler compilers[]): add -D__GNUC__ to files
  3350.     which are compiled using GNU C++.
  3351.  
  3352.     * cplus-parse.y (primary <- IDENTIFIER): If the identifier is a
  3353.     class-local enumeral value, check visibility--it may be a private
  3354.     member of a base class.
  3355.  
  3356.     * cplus-cvt.c (convert_force): New function.  Permit conversion from
  3357.     sub-type to private super-type.
  3358.     * cplus-typeck.c (build_c_cast): Call convert_force instead of
  3359.     convert.
  3360.  
  3361.     * cplus-typeck.c (build_x_function_call): Don't crash if asked to
  3362.     resolve a function which has been declared overloaded, but does
  3363.     not yet have any signatures.
  3364.  
  3365.     * cplus-class.c (finish_decl): Don't crash when warning (or
  3366.     flagging as error) that array types in static objects cannot need
  3367.     constructors.
  3368.  
  3369. Thu Jul 27 02:26:27 1989  Michael Tiemann  (tiemann at yahi)
  3370.  
  3371.     * cplus-tree.c (build_cplus_array_type): Make array type permanent
  3372.     if ELT_TYPE is permanent.  This is needed because the array type
  3373.     may exist within an inline function, and that inline function may
  3374.     be expanded at any future time.
  3375.  
  3376.     * cplus-typeck.c (build_scoped_ref): Typo caused fn call to have
  3377.     virtually no effect.
  3378.  
  3379.     * cplus-init.c (expand_recursive_init): Make usage of global
  3380.     INIT_PTR reentrant.
  3381.  
  3382.     * cplus-search.c (dfs_pushdecls): Don't try initializing a
  3383.     TYPE_DECL, just continue through it.
  3384.  
  3385.     * integrate.c (access_parm_map): Don't compensate for
  3386.     BYTES_BIG_ENDIAN if parm is BLKmode.
  3387.  
  3388.     * stmt.c (various places): Make stmt.c agree much more closely
  3389.     with GCC's stmt.c.  Now only a few places where there are
  3390.     differences.  These have to do with calling do_pending_adjust
  3391.     before running cleanups, and using `lang_printable_name' instead
  3392.     of DECL_PRINT_NAME to assign to `current_function_name'.
  3393.  
  3394. Wed Jul 26 15:04:45 1989  Michael Tiemann  (tiemann at yahi)
  3395.  
  3396.     * cplus-decl.c (finish_decl): If decl is static, but initialized
  3397.     by non-static initializer (such as an object initialized by a
  3398.     constructor), use a special initializer to make the decl lay down
  3399.     in data rather than bss space.
  3400.     * varasm.c (assemble_variable): Remove C++-specific code for above
  3401.     case.
  3402.  
  3403. Tue Jul 25 13:10:19 1989  Michael Tiemann  (tiemann at yahi)
  3404.  
  3405.     * cplus-class.c (modify_vtable_entry): If the base fndecl is
  3406.     not contained in the vtable, don't try to modify the vtable.
  3407.     This automatically includes virtual functions from virtual base
  3408.     classes.
  3409.     * cplus-class.c (modify_vtable_entry): If the virtual function
  3410.     does come from a virtual base class, remember to change its
  3411.     DECL_VINDEX from a FUNCTION_DECL to an INTEGER_CST before
  3412.     continuing with the loop.  Use the DECL_VINDEX of the base
  3413.     FUNCTION_DECL.
  3414.  
  3415.     * cplus-search.c (debug_dump_assoc): New function.
  3416.  
  3417. Mon Jul 24 11:22:50 1989  Michael Tiemann  (tiemann at yahi)
  3418.  
  3419.     * cplus-class.c (finish_struct): Break out code to initialize a
  3420.     struct with information deriving from its base classes.
  3421.     * cplus-class.c (finish_base_struct): New function where that code
  3422.     now lives.
  3423.  
  3424.     * cplus-search.c (dfs_get_vbase_types): Make full association
  3425.     list; Don't do so only when TREE_VIRTUAL bit is set.
  3426.  
  3427. Sun Jul 23 20:31:57 1989  Michael Tiemann  (tiemann at yahi)
  3428.  
  3429.     * cplus-class.c (modify_vtable_entry): Braino caused base
  3430.     association to overwrite derived associate, causing base
  3431.     virtual functions to appear in derived virtual function tables
  3432.     when they shouldn't have.
  3433.  
  3434. Sat Jul 22 14:48:51 1989  Michael Tiemann  (tiemann at yahi)
  3435.  
  3436.     * cplus-lex.c (yylex): Characters are of type `char'
  3437.     * cplus-decl.c (lang_decode_option): No longer a need for
  3438.     flag_char_charconst.
  3439.     * flags.h: ditto.
  3440.  
  3441.     * All GNU C++ files: Merged changes from 1.35 to 1.35.95.
  3442.  
  3443. Thu May 25 02:56:16 1989  Michael Tiemann  (tiemann at yahi)
  3444.  
  3445.     * cplus-init.c (expand_aggr_init_1): make sure to emit error
  3446.       message when following an error path.
  3447.  
  3448.     * stor-layout.c (layout_decl): call this function instead of
  3449.       cplus_size_in_bytes.  This saves many calls to `convert_units'.
  3450.  
  3451.     * cplus-typeck.c (cplus_size): new function, just returns the size
  3452.       of the type we are interested in (no units conversion is done).
  3453.  
  3454.     * cplus-decl.c (init_decl_processing): preallocate
  3455.       IDENTIFIER_NODES for `this' and `__delete_me__'; saves calls to
  3456.       get_identifier.
  3457.  
  3458.     * cplus-parse.y, cplus-lex.c: tried to speed things up.  Removed
  3459.       vestigial `@' construct from cplus-parse.y.  Also parse '(' ')'
  3460.       as a single token.
  3461.  
  3462.     * cplus-init.c (add_friend): make sure to return void_type_node if
  3463.       we want our callers not to see anything.  Also, undo having set
  3464.       TREE_GETS_{NEW,DELETE} if the friend we get is global operator new or
  3465.       global operator delete.
  3466.  
  3467. Tue May 23 01:10:51 1989  Michael Tiemann  (tiemann at yahi)
  3468.  
  3469.     * cplus-typeck.c (build_modify_expr): Recursive memberwise
  3470.       assignment must work on all type variants, not just the main
  3471.       variant.  Otherwise, we can't assign a const B& to a B&.
  3472.  
  3473.     * cplus-cvt.c (convert_to_pointer): convert to virtual baseclasses
  3474.       through virtual baseclass pointers.  Also, give error if
  3475.       converting up from a virtual baseclass type.
  3476.  
  3477. Mon May 22 22:03:24 1989  Michael Tiemann  (tiemann at yahi)
  3478.  
  3479.     * cplus-class.c (finish_struct): remember to give dynamic classes
  3480.       a vfield even if they don't define virtual functions (-fSOS).
  3481.  
  3482.     * cplus-decl.c (init_decl_processing): fixed typo: TYPE_POINTER_TO
  3483.       does not build a pointer type, but build_pointer_type does.
  3484.  
  3485.     * cplus-decl.c, cplus-init.c: allow builtin functions to be
  3486.       declared friends.
  3487.  
  3488.     * cplus-class.c (ideal_candidate): if the best candidates require
  3489.       user-defined type conversions, don't reject as ambiguous the
  3490.       case where one candidate comes from one class, and the other
  3491.       candidates come from base classes of that class.
  3492.  
  3493.     * stor-layout.c (layout_type): after laying out a type, make sure
  3494.       that all type variants get the type's size.
  3495.  
  3496. Fri May 19 13:20:07 1989  Michael Tiemann  (tiemann at yahi)
  3497.  
  3498.     * cplus-class.c (popclass): don't kill out prev_class_type's decls
  3499.       if not at the global binding level.
  3500.  
  3501.     * cplus-decl.c: added new field `class_shadowed', which may some
  3502.       day be used to implement nested clases.
  3503.  
  3504.     * newld.c (various places): round up size to double word boundary
  3505.       if defined(sparc) || defined(sun).
  3506.  
  3507.     * tree.c (lvalue_p): A CALL_EXPR is an lvalue if the return type
  3508.       is an addressable type.
  3509.  
  3510.     * cplus-init.c (make_friend_class): fix typo in error message.
  3511.  
  3512.     * cplus-class.c (finish_struct): Don't give error message if class
  3513.       is does not define virtual functions which must be defined if
  3514.       that class has some of its own.
  3515.  
  3516.     * cplus-class.c (instantiate_type): handle case where user
  3517.       requests member function using object, i.e., `x.f'.  If f is
  3518.       virtual, return the function found in the virtual function table.
  3519.  
  3520.     * stor-layout.c (layout_basetypes): language dependent code
  3521.       removed, put in cplus-class.c
  3522.  
  3523.     * stmt.c (expand_goto_internal, expand_end_bindings,
  3524.       fixup_cleanups): if cleanups were called on leaving a binding
  3525.       contour, and EXIT_IGNORE_STACK is not defined, call
  3526.       do_pending_stack_adjust.
  3527.  
  3528.     * gcc.c: recognize ".cxx" as a C++ file name extension.
  3529.  
  3530.     * cplus-typeck.c (convert_for_initialization,
  3531.       convert_for_assignment): convert MEMBER_REFs, if possible, to
  3532.       members or component refs as appropriate.
  3533.  
  3534.     * cplus-typeck.c (build_member_ref): recognize member refs which
  3535.       are not associated with any object in particular (i.e., could
  3536.       be, but need not be `this').
  3537.  
  3538.     * cplus-search.c (get_vbase_types): orders the virtual base
  3539.       classes so that initialization and anti-initialization are 
  3540.       performed in correct order.  A virtual baseclass is not
  3541.       destroyed until all parts of the object which could be using
  3542.       that virtual base class are destroyed.
  3543.  
  3544.     * cplus-parse.y: call build_vbase_delete if appropriate.
  3545.  
  3546.     * cplus-init.c (expand_delete): call build_vbase_delete if
  3547.       appropriate.  No longer deletes parts of objects via virtual
  3548.       base classes.
  3549.  
  3550.     * cplus-init.c: new function build_vbase_delete, performs
  3551.       destructors on objects with virtual base classes.  new function
  3552.       build_x_delete calls free-store deallocator on objects without
  3553.       running destructors.
  3554.  
  3555.     * cplus-decl.c (pushdecl, shadow_tag, and xref_tag): implement
  3556.       C-like behavior in "C" language scope vis a vis type
  3557.       declarations.
  3558.  
  3559.     * cplus-decl.c: define macros PUSH_BINDING_LEVEL and
  3560.       POP_BINDING_LEVEL.  Use these macros where appropriate.  Fixed
  3561.       bug in popping binding contours in the presence of syntax
  3562.       errors.
  3563.  
  3564.     * README, config.g++, make-links.g++: fixed minor glitches
  3565.  
  3566. Wed May 17 20:34:29 1989  Michael Tiemann  (tiemann at yahi)
  3567.  
  3568.     * stor-layout.c: move code which deletes an incomplete base type
  3569.       to cplus-class.c.
  3570.  
  3571.     * cplus-class.c (finish_struct): call `propagate_basetype_offsets'.
  3572.  
  3573.     * cplus-class.c: new function `propagate_basetype_offsets' gives
  3574.       correct offsets to base types which are not immediate base types
  3575.       in a multiple inheritance lattice.
  3576.  
  3577. Tue May 16 09:40:00 1989  Michael Tiemann  (tiemann at yahi)
  3578.  
  3579.     * Started using ChangeLog for version 1.35.0
  3580.  
  3581.  
  3582.